You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比对两个SQL查询结果差异并返回较新日期的差异行

跨日期录入数据差异查询方案

涉及表结构

查询目标表字段如下:

Name | Size | DateSale | Location | Comments | Date

匹配规则说明

  • 联合Name、Size两个字段作为匹配键,关联两个日期的同键数据
  • 对比字段为DateSale、Location、Comments,任意字段值不一致即判定为存在差异
  • 存在差异的数据仅返回日期更新(即Date='06/02/2022')的对应行,字段完全一致的行不返回

原有方案问题

SELECT DISTINCT仅能对单个结果集做去重处理,无法实现两个日期的数据集按指定键关联、逐字段对比的需求,因此无法得到预期结果。

可直接运行的实现代码

通过表自连接关联新旧两个日期的数据,逐字段判断差异即可,代码兼容空值对比场景:

SELECT 
  t_new.Name,
  t_new.Size,
  t_new.DateSale,
  t_new.Location,
  t_new.Comments,
  t_new.Date
FROM [Table] t_new
INNER JOIN [Table] t_old
  ON t_new.Name = t_old.Name
  AND t_new.Size = t_old.Size
  AND t_old.Date = '06/01/2022'
WHERE t_new.Date = '06/02/2022'
AND (
  t_new.DateSale != t_old.DateSale
  OR t_new.Location != t_old.Location
  OR (t_new.Comments IS NULL AND t_old.Comments IS NOT NULL)
  OR (t_new.Comments IS NOT NULL AND t_old.Comments IS NULL)
  OR t_new.Comments != t_old.Comments
)

如果使用的数据库支持IS DISTINCT FROM语法(如PostgreSQL、SQL Server 2022及以上版本、MySQL 8.0+),可以将上述Comments相关的三个判断条件简化为 OR t_new.Comments IS DISTINCT FROM t_old.Comments,该语法可自动识别空值差异。

结果验证

基于提供的样例数据执行上述代码:

  • 匹配键jake+90对应的新旧两行数据三个对比字段完全一致,不会被返回
  • 匹配键john+100对应的新旧行三个字段均存在差异,返回新日期对应行,完全符合预期:
john | 100  |06/05/2022| Houston  | proj.    | 06/02/2022

内容的提问来源于stack exchange,提问作者No Name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 04:39:20