Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在非常大的表中获取max date的列名_Sql Server_Sql Server 2008_Max - Fatal编程技术网

Sql server 如何在非常大的表中获取max date的列名

Sql server 如何在非常大的表中获取max date的列名,sql-server,sql-server-2008,max,Sql Server,Sql Server 2008,Max,我有一个表,其中有38列都是datetime数据类型。 我想查询每行中有最大日期的列名 我已经知道了如何确定每行的最大日期,但我不确定如何查询它来自哪个列 IF OBJECT_ID('tempdb..#MaxDates') IS NOT NULL DROP TABLE #MaxDates SELECT [ColumnOne], Max( StartDate) as MaxEffDate Into #MaxDates FROM dbo.DatabaseName gr

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

用你当前的查询,你几乎得到了它。您可以使用
甚至
交叉应用
来查找包含最大日期的列

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

我不太清楚问题的文本与代码和所需输出之间的关系。请阅读报告的第一段和你的问题。
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