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

如何用单个SQL查询获取时间区间数据及区间前最后一行?

可以用单个SQL实现需求

核心是通过UNION ALL合并两个结果集,同时保证不会出现重复数据:

最终SQL语句

-- 替换:start和:end为你的实际时间参数,比如'2024-01-01 00:00:00+00'
SELECT confirmed_at, value
FROM balance
WHERE confirmed_at BETWEEN :start AND :end
UNION ALL
SELECT confirmed_at, value
FROM balance
WHERE confirmed_at < :start
ORDER BY confirmed_at DESC
LIMIT 1
ORDER BY confirmed_at;

执行逻辑

  1. 第一部分查询直接获取时间在[start, end]区间内的所有记录。
  2. 第二部分查询筛选出所有早于start的记录,按时间倒序取最后一条(LIMIT 1),确保只拿到区间开始前的最新数据。
  3. 用UNION ALL合并两个结果集,最后按时间正序排列,让结果按时间顺序展示。

特殊场景适配

  • 当区间内无数据时:只会返回区间前的最后一条记录(如果存在),满足你获取最新历史值的需求。
  • 当没有早于start的记录时:只会返回区间内的有效数据,不会产生空行。
  • 若存在confirmed_at恰好等于start的记录:只会在第一部分查询中出现一次,不会重复输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:48:21