【问题标题】:Very hard greatest n per group query每组查询非常困难的最大 n
【发布时间】:2013-11-04 11:50:04
【问题描述】:

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

  • 角色扮演游戏
  • RPG角色
  • RPGPost
  • 用户

每个角色扮演有 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) 它给了我每个角色的最后一篇文章,但我需要每个角色扮演游戏的最后一篇文章

【问题讨论】:

  • 编辑问题,自己解决了一半,添加结果集
  • 而这一次,您自己回答了这个问题,而不希望任何人患上潜在的致命疾病。
  • 如果您花时间准备 sqlfiddle 而不是发布 SSMS 的屏幕截图,那就太好了

标签: sql sql-server-2008 greatest-n-per-group


【解决方案1】:

这有帮助吗?这应该为您提供RPGPost 表中每个CharacterID 的最后一个帖子,并包括该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;

【讨论】:

    猜你喜欢
    • 2015-01-30
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多