我的数据库中有以下数据:
| ID | FK_ID | MODEL | DATE |
+------+--------+-------+-------------------+
|1 | 11 | m1 |NULL |
|2 | 11 | m1 |NULL |
|3 | 11 | m2 |2019-05-08 12:04:24|
|4 | 11 | m2 |2019-05-08 12:07:43|
|5 | 11 | m2 |2019-05-08 12:08:37|
|6 | 11 | m3 |2019-05-08 12:13:19|
|7 | 11 | m3 |NULL |
|8 | 12 | m7 |2019-05-08 12:04:14|
我想获取每个MODEL的最新日期,但是如果某个MODEL的DATE为空,那么我想获取NULL而不是最新日期。
预期产量
| MODEL | DATE |
+-------+-------------------+
| m1 |NULL |
| m2 |2019-05-08 12:08:37|
| m3 |NULL |
我尝试了以下查询:
SELECT MODEL, DATE FROM MODEL_TABLE
WHERE FK_ID = 11 AND (DATE IN (
SELECT MAX(DATE)
FROM MODEL_TABLE
GROUP BY MODEL
) OR DATE IS NULL)
GROUP BY MODEL;
但是我得到以下结果:
实际输出(错误)
| MODEL | DATE |
+-------+-------------------+
| m1 |NULL |
| m2 |2019-05-08 12:08:37|
| m3 |2019-05-08 12:13:19|
有人可以让我知道如何更正查询以获取预期结果
答案 0 :(得分:2)
count(*)
计数所有行,count(date)
计数非空值。如果它们相同,则不存在null,即返回max(date),否则返回null。
SELECT MODEL, case when count(*) = count(DATE) then max(DATE) end
FROM MODEL_TABLE
group by MODEL
答案 1 :(得分:2)
您可以使用条件聚合:
AND
您可以用其他方式写条件。对于您正在做的事情,这似乎更直观:
OR