gpt4 book ai didi

sql-server - TSQL 条件Where 或Group By?

转载 作者:行者123 更新时间:2023-12-04 17:00:59 25 4
gpt4 key购买 nike

我有一个如下表:

id | type        | duedate
-------------------------
1 | original | 01/01/2017
1 | revised | 02/01/2017
2 | original | 03/01/2017
3 | original | 10/01/2017
3 | revised | 09/01/2017

每个 id 可能有一行或两行。如果有两行具有相同的 id,则其中一行的 type='original',另一行的 type='revised'。如果 id 只有一行,则类型将始终为“original”。

我想要的结果是 type='revised' 的所有行,但如果特定 id 只有一行(因此 type='original'),那么我也想包含该行。所以上面的期望输出是:

id | type        | duedate
1 | revised | 02/01/2017
2 | original | 03/01/2017
3 | revised | 09/01/2017

我不知道如何构造一个 WHERE 子句来有条件地检查给定 id 是否有 1 行或 2 行,也不知道如何使用 GROUP BY,因为修改后的日期可能大于或小于原始日期,因此使用聚合函数 MAX 或 MIN 不起作用。我考虑过以某种方式使用 CASE,但也不知道如何构造一个条件,在两行不同的数据(如果有两行)之间进行选择并显示其中一行而不是另一行。

任何建议的方法将不胜感激。

谢谢!

最佳答案

您可以为此使用行号。

WITH T AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Type DESC) AS RN
FROM YourTable
)
SELECT *
FROM T
WHERE RN = 1

关于sql-server - TSQL 条件Where 或Group By?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47359371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com