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

MySQL查询问题:无法获取符合指定时间戳与UUID的目标行

获取指定记录上方4行数据的解决方案

嘿,我看你遇到了个小问题——当前的查询SELECT * from table WHERE created_at > '2018-04-19 23:56:35' AND id = '01H5E4sUTlwV2yk2cdGlodr3MBf8acABsfBb'只能精准匹配到那条指定的记录,自然没法拿到它上方的4行数据。咱们调整下查询逻辑就能搞定,这里给你两种实用的方案:

方案1:通过子查询锁定时间范围(默认按created_at降序排列)

从你给出的数据表来看,记录是按created_at从新到旧排序的(最新的在最上方)。那咱们可以先拿到目标记录的创建时间,再筛选出比这个时间更新的前4条数据:

WITH target_row AS (
    SELECT created_at 
    FROM table 
    WHERE id = '01H5E4sUTlwV2yk2cdGlodr3MBf8acABsfBb'
)
SELECT * 
FROM table 
WHERE created_at > (SELECT created_at FROM target_row)
ORDER BY created_at DESC
LIMIT 4;

这个查询会直接返回目标记录上方的4条更新数据。

方案2:用窗口函数精准定位行位置

如果你的表有特殊排序规则,或者需要更灵活的行定位,推荐用ROW_NUMBER()窗口函数给每行分配行号,再找到目标行的行号,最后筛选出它前面的4行:

WITH numbered_rows AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (ORDER BY created_at DESC) AS row_num
    FROM table
),
target_row_num AS (
    SELECT row_num 
    FROM numbered_rows 
    WHERE id = '01H5E4sUTlwV2yk2cdGlodr3MBf8acABsfBb'
)
SELECT * 
FROM numbered_rows 
WHERE row_num < (SELECT row_num FROM target_row_num)
ORDER BY row_num DESC
LIMIT 4;

这种方法不受排序规则限制,不管你怎么排,都能精准拿到目标行上方的4条记录。

小提醒

  • 一定要保证ORDER BY的排序规则和你数据表显示的顺序一致,不然可能拿到不符合预期的行。
  • 如果目标记录本身就是表中的前4条,那查询结果会少于4条,这是正常的哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:35:41