假设包含以下内容的行集
EntryID Name DateModified DateDeleted
-----------------------------------------------
1 Name1 1/2/2003 NULL
2 Name1 1/3/2005 1/5/2008
3 Name1 1/3/2006 NULL
4 Name1 NULL NULL
5 Name1 3/5/2008 NULL
Run Code Online (Sandbox Code Playgroud)
澄清:
我需要一个值 - 来自BOTH列的最大非空日期.因此,在这种情况下,所有十个细胞中最大的.
SELECT MAX(CASE WHEN (DateDeleted IS NULL OR DateModified > DateDeleted)
THEN DateModified ELSE DateDeleted END) AS MaxDate
FROM Table
Run Code Online (Sandbox Code Playgroud)
对于MySQL,Postgres或Oracle,使用GREATEST函数:
SELECT GREATEST(ISNULL(t.datemodified, '1900-01-01 00:00:00'),
ISNULL(t.datedeleted, '1900-01-01 00:00:00'))
FROM TABLE t
Run Code Online (Sandbox Code Playgroud)
如果提供NULL,Oracle和MySQL都将返回NULL.该示例使用MySQL空值处理 - 相应地更新适当的数据库.
与数据库无关的替代方案是:
SELECT z.entryid,
MAX(z.dt)
FROM (SELECT x.entryid,
x.datemodified AS dt
FROM TABLE x
UNION ALL
SELECT y.entryid
y.datedeleted AS dt
FROM TABLE y) z
GROUP BY z.entryid
Run Code Online (Sandbox Code Playgroud)