含冲销标识的月末交易数据筛选SQL查询实现需求
实现方案
核心逻辑是:筛选出所有日期早于截止日期的交易,同时排除掉在截止日期前已经完成冲销的原始交易。
方案1:使用NOT EXISTS实现(兼容性最好,多数SQL方言都支持)
-- 定义传入的截止日期参数,不同数据库参数声明语法略有差异,这里用通用变量示意 DECLARE @CutoffDate DATE = '你要传入的截止日期'; SELECT t.* FROM Test_Report t WHERE t.[Date] < @CutoffDate AND NOT EXISTS ( SELECT 1 FROM Test_Report rev WHERE rev.Reversed_ID = t.ID AND rev.[Date] < @CutoffDate )
方案2:使用左连接实现
DECLARE @CutoffDate DATE = '你要传入的截止日期'; SELECT t.* FROM Test_Report t LEFT JOIN Test_Report rev ON rev.Reversed_ID = t.ID AND rev.[Date] < @CutoffDate WHERE t.[Date] < @CutoffDate AND rev.ID IS NULL
效果验证
- 当
@CutoffDate = '2021-01-31'时:
冲销交易ID3的日期是2021-02-01,不满足< '2021-01-31'的条件,所以ID2不会被排除,最终返回ID1、2,符合要求。 - 当
@CutoffDate = '2021-02-28'时:
冲销交易ID3的日期满足筛选条件,ID2会被排除,最终返回ID1、3、4,符合要求。
内容的提问来源于stack exchange,提问作者Namish
相关产品推荐
相关产品推荐

