从单个行的不同列中选择最大日期

时间:2016-08-25 08:53:05

标签: tsql sql-server-2012

我将这些数据放在表格中。

create table pick_max_date
(
 student_id int
,date1 datetime
 ,date2 datetime
 ,date3 datetime
 ,date4 datetime
) 

insert into pick_max_date
(student_id,date1,date2,date3,date4)values
(1,'2015-06-01','2016-01-01','2014-01-01','2017-01-01')
,(2,'2016-06-01','2017-08-01','2018-01-01','2017-05-06')
,(3,'2013-06-01','2019-08-01','2012-01-01','2012-05-06')

select * from pick_max_date

我需要为每位学生选择最长日期,如下所示。

    student_id    max_date
    ----------   ----------
       1          2017-01-01
       2          2018-01-01
       3          2019-08-01

如上所述选择的最佳方式是什么。任何帮助表示赞赏。

提前致谢

4 个答案:

答案 0 :(得分:2)

构造列的派生表并从该表中选择最大值

select student_id,
       (
       select max(d.d)
       from (values(date1),
                   (date2),
                   (date3),
                   (date4)
            ) as d(d)
       ) as max_date
from dbo.pick_max_date;

答案 1 :(得分:0)

Sergey Gegoyan在以下链接中描述了非常有效的四种不同方法来解决这个问题。我更喜欢第一个:

LINK

如果您发现它有用,请告诉我。

答案 2 :(得分:0)

tableName

SELECT student_id ,
  (SELECT Max(v)    FROM (VALUES (date1), (date2), (date3)) AS value(v)) as maxdate
FROM pick_max_Date

答案 3 :(得分:0)

您可以执行已提及的values表,如果列是静态的,只需使用case

select student_id

        ,(select max(d)
            from (values(date1),(date2),(date3),(date4)) as tbl(d)) as MaxDate

        ,case when date1 >= date2 and date1 >= date3 and date1 >= date4 then date1
              when date2 >= date1 and date2 >= date3 and date2 >= date4 then date2
              when date3 >= date1 and date3 >= date2 and date3 >= date4 then date3
              else date4
              end as MaxDate2
from pick_max_date