Sql 如何通过每天分成两组(白天/夜间)来获得组的平均值?
我有一张名为thermo的表,每30分钟存储两种不同的温度 (dt=时间| Ti=内部温度|至=外部温度) 我想交替得到白天和夜间的平均值。 这可以通过分组时间06:00-17:59和18:00-05:59 我所能做的最好的事情就是按照以下代码将00:00-11:59和12:00-23:59分组:Sql 如何通过每天分成两组(白天/夜间)来获得组的平均值?,sql,sqlite,Sql,Sqlite,我有一张名为thermo的表,每30分钟存储两种不同的温度 (dt=时间| Ti=内部温度|至=外部温度) 我想交替得到白天和夜间的平均值。 这可以通过分组时间06:00-17:59和18:00-05:59 我所能做的最好的事情就是按照以下代码将00:00-11:59和12:00-23:59分组: SELECT CAST(strftime('%m%d', dt) AS TIME) || CAST(strftime('%H', dt)/12 AS TIME) AS time, round(av
SELECT CAST(strftime('%m%d', dt) AS TIME) || CAST(strftime('%H', dt)/12 AS TIME) AS time,
round(avg(Ti), 1) AS Ti,
round(avg(To), 1) AS To,
FROM thermo WHERE dt > datetime(CURRENT_TIMESTAMP, 'localtime', '-10 days')
GROUP BY time ORDER BY time;
是否有方法改变时间组?您可以使用
案例来确定感兴趣的时间段:
SELECT CAST(strftime('%m%d', dt) AS TIME) as dt,
(CASE WHEN strftime('%H', dt) BETWEEN 6 AND 17 THEN 'daytime'
ELSE 'nightime'
END) as period,
round(avg(Ti), 1) as Ti,
round(avg(To), 1) as To
FROM thermo
WHERE dt > datetime(CURRENT_TIMESTAMP, 'localtime', '-10 days')
GROUP BY dt, period
ORDER BY time;
您可以使用案例
确定利息期:
SELECT CAST(strftime('%m%d', dt) AS TIME) as dt,
(CASE WHEN strftime('%H', dt) BETWEEN 6 AND 17 THEN 'daytime'
ELSE 'nightime'
END) as period,
round(avg(Ti), 1) as Ti,
round(avg(To), 1) as To
FROM thermo
WHERE dt > datetime(CURRENT_TIMESTAMP, 'localtime', '-10 days')
GROUP BY dt, period
ORDER BY time;
再想一想,这并不完全正确,因为在这种情况下,夜间包括当天早上(0-6)和下午(17-24)的温度,而每天早上应该是前一天下午的组。。。通过在strftime:,“-6小时”@volk。是的,如果你真的想要的话,减去6小时将把0-6小时视为前一天。再想一想,这不是完全正确的,因为在这种方式下,夜间包括当天上午(0-6)和下午(17-24)的温度,而每天早上都应该在前一天下午的组中。。。通过在strftime:,“-6小时”@volk。是的,如果你真的想要的话,减去6小时将把0-6小时视为前一天。