如何在非常大的表中获取最大日期的列名

时间:2019-07-08 13:02:14

标签: sql-server sql-server-2008 max

我有一个表,其中有38列都是日期时间数据类型。 我想查询每一行中具有最大日期的列名。

我已经弄清楚了如何确定每一行的最大日期,但是我不确定如何查询它来自哪一列。

IF OBJECT_ID('tempdb..#MaxDates') IS NOT NULL
    DROP TABLE #MaxDates

SELECT 
   [ColumnOne], 
  Max( StartDate) as MaxEffDate

Into #MaxDates

FROM dbo.DatabaseName 

group by [ColumnOne]

Select a.[ColumnOne], StartDate,
 (SELECT MAX(LastUpdateDate)
      FROM (VALUES   
                 (case when (ColumnTwo) < '9999-12-31' then (ColumnTwo) else '1900-01-01' end)
                ) AS UpdateDate(LastUpdateDate) 
  ) AS LastUpdateDate
From dbo.DatabaseName  a
inner join #MaxDates
on a.[ColumnOne] =#MaxDates.[ColumnOne] and a.StartDate = #MaxDates.MaxEffDate
order by a.[ColumnOne] asc

我希望得到以下结果-

ColumnOne, StartDate, LastUpdateDate, LastUpdateDateColumnName

1 个答案:

答案 0 :(得分:1)

您几乎可以通过当前查询得到它。您可以使用VALUE或什至CROSS APPLY来查找具有最大日期的列

select  t.[ColumnOne], t.StartDate, d.LastUpdateDate, d.LastUpdateDateColumnName
from    dbo.DatabaseName t
        cross apply
        (
            select  top 1 LastUpdateDate, LastUpdateDateColumnName
            from    
            (   
                values 
                (Date1, 'Date1'),
                (Date2, 'Date2'),
                (Date3, 'Date3')
                ....
            ) as d (LastUpdateDate, LastUpdateDateColumnName)
            order by LastUpdateDate desc
        ) d