首页 > 解决方案 > 检查 GROUP BY 中的条件?

问题描述

以这个示例数据为例:

ID    Status    Date
1     Pending   2/10/2020
2     Pending   2/10/2020
3     Pending   2/10/2020
2     Pending   2/10/2020
2     Pending   2/10/2020
1     Complete  2/15/2020

我需要一个 SQL 语句,它将所有数据分组但带回当前状态。因此,对于 ID 1,group by 需要一个仅返回 Completed 行并返回 ID 2 和 3 的待处理行的条件。

我不是 100% 如何在这个条件下写的。

也许是这样的:

SELECT ID, Status, Date
FROM table
GROUP BY ID, Status, Date
ORDER BY ID

问题是生成的数据如下所示:

ID    Status    Date
1     Pending   2/10/2020
1     Complete  2/15/2020
2     Pending   2/10/2020
3     Pending   2/10/2020

但是我需要:

ID    Status    Date
1     Complete  2/15/2020
2     Pending   2/10/2020
3     Pending   2/10/2020

我可以做些什么来检查 Completed 状态,以便我只能在 group by 中返回 Completed?

标签: sqlsql-servertsqlgroup-by

解决方案


只做GROUP BYID 列。用于MIN()在待处理之前选择完成。

SELECT ID, MIN(Status)
FROM table
GROUP BY ID
ORDER BY ID

推荐阅读