假设包含以下
的行集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
澄清:
我需要一个值 - 来自BOTH列的最大非空日期。因此,在这种情况下,所有十个细胞中最大的一个。
答案 0 :(得分:7)
SELECT MAX(CASE WHEN (DateDeleted IS NULL OR DateModified > DateDeleted)
THEN DateModified ELSE DateDeleted END) AS MaxDate
FROM Table
答案 1 :(得分:6)
对于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
如果提供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
答案 2 :(得分:2)
作为一般解决方案,你可以尝试这样的事情:
select max(date_col)
from(
select max(date_col1) AS date_col from some_table
union
select max(date_col2) AS date_col from some_table
union
select max(date_col3) AS date_col from some_table
...
)
可能有更简单的方法,具体取决于您使用的数据库。
答案 3 :(得分:2)
怎么样;
SELECT MAX(MX) FROM (
SELECT MAX(DateModified) AS MX FROM Tbl
UNION
SELECT MAX(DateDeleted) FROM Tbl
) T
答案 4 :(得分:1)
答案取决于你真正想要的东西。如果您只想要两个日期值中的最新值,那么您可以这样做:
Select Max(DateModified), Max(DateDeleted)
From Table
如果您要求任一列中的最大值,那么您可以这样做:
Select Case
When Max(DateModified) > Max(DateDeleted) Then Max(DateModified)
Else Max(DateDeleted)
End As MaxOfEitherValue
From Table
答案 5 :(得分:1)
以上都是有效答案;
但我不确定这是否有效?
select IsNull((
select MAX(DateModified)
from table
)
,
(
select MAX(DateDeleted)
from table
)
) as MaxOfEitherValue
from table
修改1:
今天早上在淋浴时,我有另一个解决方案:
select MAX(v) from (
select MAX(DateModified) as v from table
union all
select MAX(DateDeleted) as v from table
) as SubTable
编辑3:
该死的,只是发现这是与Alex k相同的解决方案。叹息...