【问题标题】:How to add time to the output of this max/min select?如何为这个最大/最小选择的输出添加时间?
【发布时间】:2022-01-10 11:23:20
【问题描述】:

我有一个用于记录温度的简单 sqlite3 数据库,数据库架构非常简单:-

CREATE TABLE temperatures (DateTime, Temperature);

要输出 1 个月内的最高和最低温度,我有以下查询:-

   SELECT datetime, max(temperature), min(temperature) from temperatures 
   WHERE datetime(DateTime) > datetime('now', '-1 month')
   GROUP BY strftime('%d-%m', DateTime)
   ORDER BY DateTime;

如何同时获得最大值和最小值的时间?它是否需要子查询或类似的东西?

【问题讨论】:

    标签: sqlite date subquery window-functions


    【解决方案1】:

    使用窗口函数MIN()MAX()FIRST_VALUE() 而不是聚合:

    SELECT DISTINCT date(DateTime) date, 
           MAX(temperature) OVER (PARTITION BY date(DateTime)) max_temperature, 
           FIRST_VALUE(time(datetime)) OVER (PARTITION BY date(DateTime) ORDER BY temperature DESC) time_of_max_temperature,
           MIN(temperature) OVER (PARTITION BY date(DateTime)) min_temperature,
           FIRST_VALUE(time(datetime)) OVER (PARTITION BY date(DateTime) ORDER BY temperature) time_of_min_temperature
    FROM temperatures 
    WHERE datetime(DateTime) > datetime('now', '-1 month')
    ORDER BY date;
    

    如果您的 DateTime 列包含 ISO 格式 YYYY-MM-DD hh:mm:ss 的值,则不需要 datetime(DateTime)
    可以直接使用DateTime

    【讨论】:

    • 太棒了,谢谢。 datetime(DateTime) 是从我认为该列不是 ISO 格式的其他代码继承的。无论如何,您的代码运行良好,谢谢!
    猜你喜欢
    • 2015-09-12
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多