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

如何将DB表中Timestamp大于Summary表最大Timestamp的行插入Summary表?

解决将DB表中符合时间条件的数据插入Summary表的问题

需求说明

现有两张表:

  • Summary表:包含ID、NAME、TIMESTAMP字段,当前数据如下:
IDNAMETIMESTAMP
1A2018-06-28 15:12:46
2B2018-06-28 16:12:46
3C2018-06-28 18:12:46
  • DB表:结构与Summary表一致,当前数据如下:
IDNAMETIMESTAMP
1D2018-06-28 15:12:46
2E2018-06-28 19:12:46
3F2018-06-28 22:12:46

需要将DB表中TIMESTAMP大于Summary表最大TIMESTAMP(即2018-06-28 18:12:46)的行插入到Summary表,最终得到的Summary表数据如下:

IDNAMETIMESTAMP
1A2018-06-28 15:12:46
2B2018-06-28 16:12:46
3C2018-06-28 18:12:46
2E2018-06-28 19:12:46
3F2018-06-28 22:12:46

原SQL的问题

你尝试的SQL语句存在两个关键错误:

  1. WHERE子句不能直接使用聚合函数:MAX(SUMMARY.timestamp)是聚合函数结果,无法直接在WHERE中作为筛选条件,需要通过子查询单独获取。
  2. 错误的表连接方式:使用逗号连接DB和SUMMARY表会产生笛卡尔积,完全偏离了筛选DB表数据的需求。

正确的SQL语句

基础版本(Summary表非空时)

通过子查询获取Summary表的最大时间戳,再筛选DB表中符合条件的数据插入:

INSERT INTO SUMMARY (ID, NAME, TIMESTAMP)
SELECT ID, NAME, TIMESTAMP
FROM DB
WHERE DB.TIMESTAMP > (SELECT MAX(TIMESTAMP) FROM SUMMARY);

兼容空表的版本

如果Summary表可能为空,MAX(TIMESTAMP)会返回NULL,此时可以用COALESCE设置一个默认的起始时间,确保所有DB表数据都能插入:

INSERT INTO SUMMARY (ID, NAME, TIMESTAMP)
SELECT ID, NAME, TIMESTAMP
FROM DB
WHERE DB.TIMESTAMP > COALESCE((SELECT MAX(TIMESTAMP) FROM SUMMARY), '1970-01-01 00:00:00');

效果验证

执行上述SQL后,DB表中TIMESTAMP大于2018-06-28 18:12:46的E、F两行会被插入到Summary表,结果与预期一致。

内容的提问来源于stack exchange,提问作者mark dan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:01:16