我的数据库中有以下数据:
| 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|
我想获得每个模型的最新日期,但是如果模型的日期为空,那么我想获得 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|
有人可以让我知道如何更正查询以获取预期结果
count(*)
计算所有行,count(date)
计算非空值。如果它们相同,则不存在null,即返回max(date),否则返回null。
SELECT MODEL, case when count(*) = count(DATE) then max(DATE) end
FROM MODEL_TABLE
group by MODEL
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句