Here is an example of the table I am working with. What I would like to achieve is to select the most recent row where the type is not 'NONE' unless 'NONE' is the only type available for that id.
| id | date | type |
|---|---|---|
| 123 | 01-01-2021 | NONE |
| 123 | 12-31-2021 | NONE |
| 123 | 01-01-2021 | METAL |
| 123 | 12-31-2021 | METAL |
From the example table above I would expect the query to return this
| id | date | type |
|---|---|---|
| 123 | 12-31-2021 | METAL |
If the table were to only contain types of "NONE" such as this example...
| id | date | type |
|---|---|---|
| 123 | 01-01-2021 | NONE |
| 123 | 12-31-2021 | NONE |
| 123 | 01-01-2021 | NONE |
| 123 | 12-31-2021 | NONE |
Then I would expect the result set to be..
| id | date | type |
|---|---|---|
| 123 | 12-31-2021 | NONE |
I've tried a plethora of different ways to do this but my current attempt looked something like this. It works when there's only one ID in the table but not for when I try to select a row for every specific ID in the table.
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