MySQL查询:获取符合条件的限定结果集最后一条记录的Jp_n与Date
获取FF_LOG表指定筛选条件下排序后前5条中的最后一条记录
你需要的是从符合条件的记录中先取按Jp_n排序的前5条,再获取其中最后一条的Jp_n和Date字段值,以下是不同数据库环境下的实现方案:
通用子查询方案(适配多数数据库)
先通过子查询筛选出符合条件的前5条记录,再对这5条记录倒序排序后取第一条,就能得到原排序下的第5条:
SELECT Jp_n, `Date` FROM ( -- 先筛选符合条件的记录并按Jp_n排序,取前5条 SELECT Jp_n, `Date` FROM FF_LOG WHERE USER_id = 1 AND RW >= 2 AND incompl = 1 ORDER BY Jp_n LIMIT 5 ) AS filtered_top5 -- 对前5条倒序,取第一条即为原排序的最后一条 ORDER BY Jp_n DESC LIMIT 1;
按偏移量直接获取(更高效)
如果数据库支持偏移量语法,可以直接跳过前4条,取第5条,省去子查询的开销:
MySQL/MariaDB
SELECT Jp_n, `Date` FROM FF_LOG WHERE USER_id = 1 AND RW >= 2 AND incompl = 1 ORDER BY Jp_n -- LIMIT 偏移量, 条数:偏移4条后取1条,即第5条 LIMIT 4, 1;
PostgreSQL
SELECT Jp_n, "Date" FROM FF_LOG WHERE USER_id = 1 AND RW >= 2 AND incompl = 1 ORDER BY Jp_n -- 跳过前4条,取1条 OFFSET 4 LIMIT 1;
SQL Server
SELECT Jp_n, [Date] FROM FF_LOG WHERE USER_id = 1 AND RW >= 2 AND incompl = 1 ORDER BY Jp_n -- 偏移4行后取1行 OFFSET 4 ROWS FETCH NEXT 1 ROW ONLY;
注意事项
Date是SQL保留字,不同数据库需要用对应符号包裹:MySQL用反引号`,PostgreSQL用双引号",SQL Server用方括号[]。- 若需要按
Jp_n降序排序,只需在ORDER BY Jp_n后添加DESC即可。
内容的提问来源于stack exchange,提问作者Steve Dawgbone Kel
相关产品推荐
相关产品推荐

