【发布时间】:2021-12-16 12:11:13
【问题描述】:
假设我有一个下表:
id | temp_id | status | date
------+---------+------------+-----------
0 10 | 123-abc | closed | 2021-11-01
1 12 | 123-abc | open | 2021-10-26
2 14 | 123-abc | null | null
3 15 | 123-abc | open | 2021-10-26
4 17 | 123-abc | open | 2021-10-26
5 20 | 456-xyz | open | 2021-10-29
6 22 | 456-xyz | null | null
7 20 | 789-uvw | closed | 2021-10-06
8 22 | 789-uvw | closed | 2021-10-06
我想编写一个查询以从表中查找所有 temp_id,其中某些列(状态、日期)的值与相同的 temp_id 不匹配,并且至少其中一个的状态 = '已关闭'
对于这个表,它应该在 temp id 列中只返回 123-abc,如:
| temp_id |
---+---------+
0 | 123-abc |
在这里,我不希望 456-xyz 作为结果出现,因为即使 id 20 和 22 具有相同的 temp_id 和不同的状态值,日期 - 但状态都没有“关闭”,因此最终结果不需要.而对于 789-uvw,两条记录(7 和 8)的状态为已关闭且日期也相同,因此也不需要。
到目前为止我的想法: 我正在使用由 temp_id 分区的 row_number,但在上面的示例中,如何比较 row_number 1 到 5 的 temp_id = '123-abc' 并查看其中是否有任何状态 = '已关闭'。我尝试了 any() 但它会引发错误,我想我没有正确使用它。任何帮助将不胜感激。谢谢。
【问题讨论】:
-
样本数据很好,但您也应该使用相同的格式指定预期结果!
-
“一些列”不是很有帮助...
-
@jarlh - 我现在正在修复它
-
@andrew - 如果有帮助,我提供了更多详细信息。