【发布时间】:2018-03-13 15:18:29
【问题描述】:
我正在尝试使用 MIN() 聚合函数并从两列中获取最小日期,并且我能够为此编写 SQL 查询。但是,如果其中一列具有 NULL 值,则下面的查询将默认日期设为“1900-01-01T00:00:00Z”。它应该从 Column1 或 Column2 中获取日期,以具有值的为准。
这是架构和数据SQLFiddle
+----+--------------+---------------+
| ID | ObservedDate | SubmittedDate |
+----+--------------+---------------+
| 1 | '2017-02-14' | '2017-02-15' |
| 1 | '2017-01-21' | '2017-01-22' |
| 2 | '2017-01-21' | |
+----+--------------+---------------+
查询
SELECT [ID],
CASE WHEN MIN(ObservedDate)<=MIN(SubmittedDate)
THEN COALESCE(MIN(ObservedDate),MIN(SubmittedDate))
ELSE COALESCE(MIN(SubmittedDate),MIN(ObservedDate)) end as RiskReferenceDate
FROM Measurements
group by ID
我使用COALESCE 的原因是因为我希望我的查询考虑具有值的列中的数据并忽略具有空值的列
预期结果
+----+-------------------+
| ID | RiskReferenceDate |
+----+-------------------+
| 1 | '2017-01-21' |
| 2 | '2017-01-21' |
+----+-------------------+
【问题讨论】:
-
在你的 Sql Fiddle 而不是 '' 你放 NULL (2, '2017-01-21 00:00:00', null)
-
您想要的输出与您所说的冲突。你说你想要 MIN 但你想要的输出是 MAX。和'' NULL。当您有一个空字符串作为日期时,它会隐式转换为 1900-01-01。
-
很抱歉我更新了想要的结果
标签: sql sql-server aggregate-functions coalesce isnull