SQL Server 从 3 列中选择最短日期

sho*_*ton -1 sql t-sql sql-server

我有一个包含几个日期字段的表。我需要获取一个派生字段,它是 3 个特定字段中最早的日期。我必须为 4 个不同的日期集执行此操作。

Zoh*_*led 6

一种简单的方法是使用case表达式:

select case when Date1 > Date2 and Date1 > Date3 then
           Date1 
       when Date2 > Date3 and Date2 > Date1 then
           Date2
       else
           Date3
       end As TheDate
from tableName
Run Code Online (Sandbox Code Playgroud)

虽然这很简单,但如果您有更多列,它往往会很快变得非常麻烦。另一种选择是使用该values子句,如下所示:

select (
    select max(date)
    from (values (date1), (date2), (date3))v(date)
) 
from tableName
Run Code Online (Sandbox Code Playgroud)

这也使您能够轻松获得最小值。

  • 我在语法方面遇到了一些麻烦,btu 让它从另一个标记为重复的线程中的示例中工作。SELECT [其他字段], (SELECT Max(v) FROM (VALUES (date1), (date2), (date3),...) AS value(v)) as [MaxDate] FROM [YourTableName] (3认同)