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
相关产品推荐
相关产品推荐

