SQLite按日期优先、num次之获取最大行的查询问题
解决SQLite中按日期优先、num次之排序取最大行的问题
嘿Alex,折腾8小时确实够闹心的,咱这就把问题解决掉!
问题分析
你需要的是整个数据表中,先按日期从新到旧排序,同日期下再按num从大到小排序,取排序后的第一行数据,也就是你要的8和15-02-2018。而你当前返回2,大概率是排序方向错了,或者日期的字符串格式导致排序逻辑不对。
解决方案
情况1:日期格式是标准可排序格式(如YYYY-MM-DD)
如果你的日期列存储的是SQLite能正确识别的日期格式,直接用以下查询:
SELECT num, date_column FROM your_table_name -- 替换成你的表名 ORDER BY date_column DESC, num DESC LIMIT 1;
ORDER BY date_column DESC:确保最新的日期排在最前面num DESC:同日期下,最大的num排在最前面LIMIT 1:只取排序后的第一行
情况2:日期是DD-MM-YYYY这类字符串格式
如果你的日期是像15-02-2018这样的DD-MM-YYYY字符串,直接排序会出错(因为字符串是按字符顺序比大小,不是日期逻辑),需要先转换成标准日期格式再排序:
SELECT num, date_column FROM your_table_name -- 把DD-MM-YYYY转换成YYYY-MM-DD格式后排序 ORDER BY STRFTIME('%Y-%m-%d', REPLACE(date_column, '-', '/')) DESC, num DESC LIMIT 1;
这里用REPLACE把日期中的-换成/,是因为SQLite的STRFTIME函数需要用/分隔的日期字符串才能正确解析。
为什么你当前返回的是2?
大概率是这两个原因:
- 你没加
DESC,默认是升序排序,同日期下2会排在8前面 - 日期字符串格式导致排序错误,拿到了不是最新日期的行,但你示例里日期是对的,所以更可能是排序方向的问题
验证示例
假设你的表数据如下:
| num | date_column |
|---|---|
| 2 | 15-02-2018 |
| 8 | 15-02-2018 |
| 5 | 14-02-2018 |
用上面的查询就能准确返回8和15-02-2018啦!
内容的提问来源于stack exchange,提问作者Magobin
相关产品推荐
相关产品推荐

