Как получить имя столбца для максимальной даты в очень большой таблице - PullRequest
0 голосов
/ 08 июля 2019

У меня есть таблица, которая имеет 38 столбцов с типом данных datetime.Я хочу запросить имя столбца с максимальной датой в каждой строке.

Я выяснил, как определить максимальную дату каждой строки, но я не уверен, как запросить, из какого столбца она пришла,

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 Ответ

1 голос
/ 08 июля 2019

вы почти получили его с вашим текущим запросом.Вы можете использовать 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
...