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

本文介绍了一种在SQL中从多个相同类型的列中找出最大值的方法。通过创建示例表并填充数据,演示了使用不同方法来获取每行记录中的最新日期。包括使用子查询、UNPIVOT操作及联合查询等多种实用技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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

这里给出一个例子

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值