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

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前面
  • 日期字符串格式导致排序错误,拿到了不是最新日期的行,但你示例里日期是对的,所以更可能是排序方向的问题

验证示例

假设你的表数据如下:

numdate_column
215-02-2018
815-02-2018
514-02-2018

用上面的查询就能准确返回8和15-02-2018啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:04:47