SQL - 从多列获取最新日期

Sco*_*ker 8 sql

假设包含以下内容的行集

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列的最大非空日期.因此,在这种情况下,所有十个细胞中最大的.

Mar*_*ith 8

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)

  • 那将需要是`CASE WHEN ISNULL(DateModified, 0) > ISNULL(DateDeleted, 0)` 我认为 (2认同)

OMG*_*ies 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
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)

  • 您的第一个解决方案不起作用.1)Greatest不是一个聚合函数,它每行返回一个结果,所以需要`MAX(GREATEST(...)`2)除了(至少在Oracle上)`GREATEST(some_value,NULL)`返回`NULL` ,因此无法满足OP的具体需求. (2认同)