【发布时间】:2021-04-30 10:39:18
【问题描述】:
我有一张表格,其中列出了游戏玩家以及他们在游戏中的等级变化历史(初级、中级、高级、精英、专业)。我正在尝试构建一个查询,以准确识别 2021 年迄今为止首次达到高级或更高级别的人(玩家有可能跳过排名,所以我想要他们达到高级或高级的最早日期、精英或专业级别)。我目前正在使用这个查询:
SELECT *
FROM (
SELECT p."ID", ra."NewRank", MIN(ra."EffectiveDate") AS "first_time_adv"
FROM rankachievement ra
JOIN player p
ON ra."ID" = p."ID"
WHERE ra."NewRank" IN ('Advanced',
'Elite',
'Pro')
GROUP BY 1, 2) AS t
WHERE t."first_time_adv" > '1/1/2021'
ORDER BY 1
现在,这是在拉动所有2021年第一次达到高级水平的人,但它也在拉动一些以前在2020年达到高级水平的人,现在已经达到了更高的水平——我不想包括这些人,这就是为什么我在日期中使用了 MIN。
例如,它正确地拉入了在 1 月 2 日达到高级的玩家 1 和 2,以及在跳过高级后于 1 月 4 日达到精英的玩家 4(从中级直接进入精英)。但它也吸引了玩家 3,他们在 2020 年 12 月 30 日达到高级,然后在 1 月 10 日达到精英 - 我不希望玩家 3 被包括在内,因为他们在 2021 年之前第一次达到高级。我怎样才能得到我的查询排除这样的人?
【问题讨论】:
标签: postgresql subquery min