SQLite中查询指定记录后3条数据时出现数据缺失问题
解决SQLite查询指定记录后N条数据的问题
咱们先拆解下你当前遇到的问题:你写的查询语句是在筛选winner_1值大于86的记录,但你真正需要的是找到winner_1=86的那条记录(对应draw_date为2015-01-05)之后的所有记录,再按日期排序取前3条——这两个逻辑完全不同,所以结果才会不符合预期。
正确的查询语句
你需要先定位到目标记录的draw_date,再筛选该日期之后的记录,最后排序取前3:
SELECT * FROM winners_night WHERE draw_date > (SELECT draw_date FROM winners_night WHERE winner_1 = 86) ORDER BY draw_date LIMIT 3;
语句逻辑解释
- 子查询
(SELECT draw_date FROM winners_night WHERE winner_1 = 86)会精准获取到winner_1=86那条记录的开奖日期(也就是2015-01-05) - 外层查询筛选所有
draw_date > '2015-01-05'的记录,这就包含了你期望的2015-01-06、01-07、01-08这几条 - 按
draw_date升序排序(契合“指定记录之后”的时间顺序),最后用LIMIT 3取前3条,正好匹配你的预期结果
补充说明
你提到row_id存在间隙,所以用draw_date排序是非常正确的选择,它能保证记录按实际开奖日期的先后顺序排列,不会受row_id间隙的影响。
原始问题相关信息
- 当前使用的错误查询语句:
SELECT * FROM winners_night WHERE winner_1 > 86 ORDER BY draw_date LIMIT 3
- 错误结果:
draw_date winner_1 winner_2 winner_3 2015-01-06 87 40 95 2015-01-18 95 66 20 2015-01-28 96 25 94
- 期望结果:
draw_date winner_1 winner_2 winner_3 2015-01-06 87 40 95 2015-01-07 46 72 74 2015-01-08 30 71 94
- 表结构:
Table [winners_night] Fields: 9 [row_id]: INTEGER NOT NULL [year]: CHAR [month]: CHAR [date_of_the_month]: CHAR [day_of_the_week]: CHAR [draw_date]: DATE [winner_1]: INTEGER [winner_2]: INTEGER [winner_3]: INTEGER Foreign Keys: 0 Indexes: 2 [sqlite_autoindex_winners_night_1] PRIMARY [draw_date] [row_id] [row_id] Triggers: 0 Unique constraints: 0 Check constraints: 0
内容的提问来源于stack exchange,提问作者madcoderz
相关产品推荐
相关产品推荐

