0

我在这里有一个非常复杂的查询,我试着在这里给你一个关于必要表的概述:

  • 角色扮演游戏
  • 角色扮演游戏角色
  • 角色扮演邮政
  • 用户

我们每个 RPG 有 X 个字符,每个字符有 x 个帖子。1 个用户可以拥有 X 个字符,但 1 个字符仅取决于 1 个用户。

我想要的是一个查询,其中我得到了每个 RPG 的最后一篇文章,其中包含关于写这篇文章的用户名、角色和 RPG 本身的信息,以及我们每个 RPG 有多少 RPGPosts(总计)的数字。

这是我到目前为止解决它的程度:

  SELECT        c.RPGID, c.Name, DateTime, r.Name, u.Username, t.count
  FROM            dbo.RPGCharacter c  inner join
   (
        SELECT  CharacterID,  
                MAX(DateTime) MaxDate
        FROM    RPGPost
        GROUP BY CharacterID
    ) MaxDates ON c.RPGCharacterID = MaxDates.CharacterID 
    INNER JOIN  RPGPost p ON   MaxDates.CharacterID = p.CharacterID
                AND MaxDates.MaxDate = p.DateTime
    Inner join RPG r on c.RPGID = r.RPGID
    Inner join [User] u on u.UserID = c.OwnerID
    inner join (Select RPG.RPGID, Count(*) as Count from RPGPost 
                inner join RPGCharacter on RPGPost.CharacterID = RPGCharacter.RPGCharacterID
                inner join RPG on RPG.RPGID = RPGCharacter.RPGID 
                where RPGPost.IsDeleted = 0
                Group by RPG.RPGID) t on r.RPGID = t.RPGID
    Order by DateTime desc

结果:http ://abload.de/image.php?img=16iudw.jpg

这个查询给了我所有我想要的但有一个错误:

1) 它给了我每个角色的最后一篇文章,但我需要每个角色扮演游戏的最后一篇文章

4

1 回答 1

1

这有帮助吗?这应该为您提供表中的最后一个帖子CharacterIDRPGPost并包括该帖子的总数CharacterID

WITH RankedPost AS (
    SELECT
        P.PostID,
        P.CharacterID,
        P.DateTime
        RANK() OVER (
                PARTITION BY CharacterID, 
                ORDER BY DateTime DESC) Rank,
        RANK() OVER (
                PARTITION BY CharacterID, 
                ORDER BY DateTime ASC) Count
        FROM RPGPost P)
SELECT
    P.DateTime
    P.CharacterID,
    P.Count
FROM RankedPost P
WHERE
    RankedPost.Rank = 0;
于 2013-10-25T12:21:39.760 回答