在Microsoft SQL Server中从多表获取每行最新更新日期
解决每行数据获取最新更新日期的问题
你的原查询用了TOP 1,所以只返回了所有记录里更新日期最新的那一行,而不是每个ID对应的最新更新日期。下面提供几种针对性的解决方案:
方法一:使用GREATEST函数(SQL Server 2022+适用)
直接比较两个表的更新日期字段,取最大值,语法最简洁:
SELECT A.ID, GREATEST(A.T_LAST_WRITE, B.T_LAST_WRITE) AS LatestUpdateDate FROM dbo.A JOIN dbo.B ON A.ID = B.ID_
方法二:使用CASE语句(兼容所有SQL Server版本)
如果你的SQL Server版本不支持GREATEST,可以用CASE判断哪个日期更大:
SELECT A.ID, CASE WHEN A.T_LAST_WRITE >= B.T_LAST_WRITE THEN A.T_LAST_WRITE ELSE B.T_LAST_WRITE END AS LatestUpdateDate FROM dbo.A JOIN dbo.B ON A.ID = B.ID_
方法三:基于UNPIVOT扩展(适合多日期字段场景)
如果后续需要添加更多表的更新日期字段,用这种方式不用大幅修改逻辑,通过窗口函数按ID分组取每组最新日期:
SELECT ID, Val AS LatestUpdateDate FROM ( SELECT dt.ID, dates.Val, ROW_NUMBER() OVER (PARTITION BY dt.ID ORDER BY dates.Val DESC) AS rn FROM ( SELECT A.ID, B.T_LAST_WRITE BDT, A.T_LAST_WRITE ADT FROM dbo.A JOIN dbo.B ON A.ID = B.ID_ ) dt UNPIVOT ( Val FOR L IN (ADT, BDT) ) AS dates ) ranked WHERE rn = 1
内容的提问来源于stack exchange,提问作者Akshay
相关产品推荐
相关产品推荐

