从用户返回第10和第100个帖子ID的查询-数据浏览器

时间:2018-12-30 01:01:34

标签: sql sql-server tsql posts dataexplorer

我正在编写一个查询,该查询将从data explorer schemaPostsUsers表中提取并输出每个用户的第10个和第100个帖子ID。输出将是第10或第100个帖子ID的列,以及第二列,说明它是该用户的第10还是第100个帖子。

我很难确定如何从每个用户那里获得第10和第100条帖子。我从计算每个用户的帖子数开始,但是我的查询仍然没有将所有用户ID分组在一起。

SELECT u.Id, u.DisplayName, p.Id, COUNT(p.Id) as numPost
FROM Users AS u
LEFT JOIN Posts AS p ON u.Id = p.OwnerUserId
GROUP BY u.Id, u.DisplayName, p.Id

我期望该功能输出每个用户的帖子数,并查看是否可以从那里提取第10和第100个帖子,但是我认为我朝错误的方向前进。 Current query output

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

我建议为此使用row_number() over(...)

SELECT
    uid
  , displayname
  , MAX(CASE WHEN rn = 10  THEN pid END) AS pid10
  , MAX(CASE WHEN rn = 100 THEN pid END) AS pid100
FROM (
    SELECT
        u.Id                                                AS uid
      , u.DisplayName
      , p.Id                                                AS pid
      , ROW_NUMBER() OVER (PARTITION BY u.Id ORDER BY p.id) AS rn
    FROM Users AS u
    LEFT JOIN Posts AS p ON u.Id = p.OwnerUserId
    ) AS up
WHERE (
        rn IN (10, 100)
     OR rn IS NULL
      )
GROUP BY
    uid
  , displayname

我认为左边的帖子加入是因为您希望所有用户都返回,如果是这样,请注意,对于没有帖子的任何用户,都需要where子句中的OR RN IS NULL

demo