我有一个表,其中有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
答案 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