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

SQLite3查询中如何选取指定数量最新唯一日期的全部数据行

解决SQLite获取最新7个日期所有数据行的问题

嘿,我懂你遇到的问题了!你之前用LIMIT 7的写法,本质是告诉SQL返回最多7行数据,而不是「最新7个日期对应的全部数据」——这就是为什么每个日期只拿到了1行,因为排序后前7行刚好是每个日期的第一行。

要实现你的需求,核心思路是:先筛选出需要的7个日期,再把原表中所有属于这些日期的数据都捞出来。下面是具体的解决方案:

方法一:用子查询筛选日期

先通过子查询拿到最新的7个唯一日期,再在外层查询中匹配这些日期的所有记录:

SELECT date, application, usage_time 
FROM monitor 
WHERE date IN (
    -- 先获取最新的7个日期
    SELECT DISTINCT date 
    FROM monitor 
    ORDER BY date DESC 
    LIMIT 7
)
-- 保持你需要的排序规则
ORDER BY date DESC, usage_time ASC;

方法二:用WITH子句提升可读性(SQLite 3.33.0+)

如果你的SQLite版本在3.33.0及以上,可以用CTE(公共表表达式)让代码结构更清晰:

WITH latest_7_dates AS (
    SELECT DISTINCT date 
    FROM monitor 
    ORDER BY date DESC 
    LIMIT 7
)
SELECT date, application, usage_time 
FROM monitor
JOIN latest_7_dates USING(date)
ORDER BY date DESC, usage_time ASC;

额外提示

你原来的Python代码里用了sorted(),但其实SQL查询已经通过ORDER BY完成了排序,除非你需要在Python层面做特殊的二次排序,否则可以去掉这个sorted(),避免重复排序浪费性能。修改后的Python代码可以是:

all_app_data = conn.execute('''
    SELECT date, application, usage_time 
    FROM monitor 
    WHERE date IN (
        SELECT DISTINCT date 
        FROM monitor 
        ORDER BY date DESC 
        LIMIT 7
    )
    ORDER BY date DESC, usage_time ASC
''').fetchall()

这样就能拿到2021年7月30日至8月5日这7个日期下的所有数据行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 23:28:11