如何将时间添加到此 max/min select 的输出?
How to add time to the output of this max/min select?
我有一个简单的 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;
我怎样才能得到最大值和最小值的时间?它是否需要子查询或类似的东西?
使用 window 函数 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
.
我有一个简单的 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;
我怎样才能得到最大值和最小值的时间?它是否需要子查询或类似的东西?
使用 window 函数 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
.