在一个SQL Server表中一行的多个列找出最大值

 

有时候我们需要从多个相同的列里(这些列的数据类型相同)找出最大的那个值,并显示

这里给出一个例子

IF (OBJECT_ID('tempdb..##TestTable') IS NOT NULL)

    DROP TABLE ##TestTable

 

CREATE TABLE ##TestTable

(

    ID INT IDENTITY(1,1) PRIMARY KEY,

    Name NVARCHAR(40),

    UpdateByApp1Date DATETIME,

    UpdateByApp2Date DATETIME,

    UpdateByApp3Date DATETIME

 )

 

INSERT INTO ##TestTable(Name, UpdateByApp1Date, UpdateByApp2Date, UpdateByApp3Date )

VALUES('ABC', '2015-08-05','2015-08-04', '2015-08-06'),

      ('NewCopmany', '2014-07-05','2012-12-09', '2015-08-14'),

      ('MyCompany', '2015-03-05','2015-01-14', '2015-07-26')

     

SELECT * FROM ##TestTable

 

 

结果如下所示

 

有三种方法可以实现

 

方法一

SELECT  ID ,

        Name ,

        ( SELECT    MAX(LastUpdateDate)

          FROM      ( VALUES ( UpdateByApp1Date), ( UpdateByApp2Date),

                    ( UpdateByApp3Date) ) AS UpdateDate ( LastUpdateDate )

          ) AS LastUpdateDate

FROM    ##TestTable

 

方法二

SELECT  ID ,

        [Name] ,

        MAX(UpdateDate) AS LastUpdateDate

FROM    ##TestTable UNPIVOT ( UpdateDate FOR DateVal IN

 ( UpdateByApp1Date,UpdateByApp2Date,UpdateByApp3Date ) ) AS u

GROUP BY ID , Name

      

 

方法三

SELECT  ID ,

        name ,

        ( SELECT    MAX(UpdateDate) AS LastUpdateDate

          FROM    ( SELECT    tt.UpdateByApp1Date AS UpdateDate

                      UNION

                      SELECT    tt.UpdateByApp2Date

                      UNION

                      SELECT    tt.UpdateByApp3Date

                    ) ud

        ) LastUpdateDate

FROM    ##TestTable tt

posted @   每天进步多一点  阅读(3128)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示