【发布时间】:2022-01-24 03:48:33
【问题描述】:
这是我正在使用的表的示例。我想要实现的是选择类型不是“NONE”的最新行,除非“NONE”是该id唯一可用的类型。
| id | date | type |
|---|---|---|
| 123 | 01-01-2021 | NONE |
| 123 | 12-31-2021 | NONE |
| 123 | 01-01-2021 | METAL |
| 123 | 12-31-2021 | METAL |
从上面的示例表中,我希望查询返回这个
| id | date | type |
|---|---|---|
| 123 | 12-31-2021 | METAL |
如果表格只包含“NONE”类型,例如这个例子......
| id | date | type |
|---|---|---|
| 123 | 01-01-2021 | NONE |
| 123 | 12-31-2021 | NONE |
| 123 | 01-01-2021 | NONE |
| 123 | 12-31-2021 | NONE |
那么我希望结果集是..
| id | date | type |
|---|---|---|
| 123 | 12-31-2021 | NONE |
我已经尝试了很多不同的方法来做到这一点,但我目前的尝试看起来像这样。它在表中只有一个 ID 时有效,但不适用于我尝试为表中的每个特定 ID 选择一行时。
SELECT DISTINCT ON (id),
date,
type
FROM
example_table
WHERE
CASE
WHEN
( SELECT
COUNT(*)
FROM
example_table t
WHERE
t.type <> 'NONE'
AND t.id = example_table.id)
<> 0
THEN type <> 'NONE'
ELSE 1=1
END
ORDER BY
id, date DESC
【问题讨论】:
标签: sql database postgresql