如何获取并合并3份最新快照?SQL查询现有93份快照的疑问
获取并合并最新3份快照的SQL方案
你的现有代码其实没筛选出第93份快照(得加上WHERE CDP_DATE = @CDP_DATE_CURRENT才对)。要拿到最新的3份(也就是第91、92、93份,对应倒数三个最大的CDP_DATE),给你两种实用方法:
方法一:窗口函数法(推荐)
用DENSE_RANK()给日期倒序排名,直接筛选排名前3的数据:
WITH RankedSnapshots AS ( SELECT *, DENSE_RANK() OVER (ORDER BY CDP_DATE DESC) AS DateRank FROM [CD].[dbo].[abc] ) SELECT * FROM RankedSnapshots WHERE DateRank <= 3;
如果每个日期对应唯一快照(无重复日期),换成ROW_NUMBER()也一样能用。
方法二:先取日期再筛选
先查出最新的3个日期,再关联原表取对应数据:
SELECT * FROM [CD].[dbo].[abc] WHERE CDP_DATE IN ( SELECT DISTINCT TOP 3 CDP_DATE FROM [CD].[dbo].[abc] ORDER BY CDP_DATE DESC );
要是担心子查询性能,也可以把前3个日期存到临时表再关联,逻辑完全一致。
小提醒
- 如果
CDP_DATE是日期/时间类型,别用VARCHAR定义变量,改成DATE或DATETIME更稳妥,避免字符串排序出问题。 - 确认
CDP_DATE的倒序排序逻辑正确,确保前3个结果就是你要的最新快照。
内容的提问来源于stack exchange,提问作者Edlynn's Mumny
相关产品推荐
相关产品推荐

