[英]SQLite: Subquery to group by max count
我正在使用以下示例行的SQLite数据库,其中包含{id,温度,描述,time_stamp列:
1 45 Clear 2016-01-13 10:24:17
2 45 Clear 2016-01-13 10:24:41
3 45 Clear 2016-01-13 10:24:41
4 45 Rain 2016-01-13 10:24:41
5 46 Clear 2016-01-13 10:38:29
6 46 Clear 2016-01-13 10:38:53
7 46 Clear 2016-01-13 10:39:08
8 46 Clear 2016-01-13 10:39:08
我对它们运行此查询以按时间间隔和天气描述将它们分组:
SELECT AVG(current_temperatures) AS temp_avg,
CASE WHEN strftime('%M', time_stamp) < '30'
THEN strftime('%H', time_stamp)
ELSE strftime('%H', time_stamp, '+1 hours') END as hour,
current_weather_description,
count(*) as counter
FROM weather_events
GROUP BY strftime('%H', time_stamp, '+30 minutes'), current_weather_description
order by hour desc
具有以下结果{row_num,temp_avg,hour,current_weather_description,counter}:
"46.0" "11" "Clear" "4"
"45.0" "10" "Clear" "3"
"45.0" "10" "Rain" "1"
我的问题是如何子查询每个小时和最大计数器组。 所以最终我想得到结果:
"46.0" "11" "Clear" "4"
"45.0" "10" "Clear" "3"
我是SQL和SQLite的新手。 所有数据都来自同一张表。 另外,由于查询的温度是平均值,因此如何选择我要求选择的其余列? 例如,如果您还选择了time_stamp,则会从数据库中看到它是特定的time_stamp。 是否随机选择要选择的列?
您可以通过sql查询获得正确的输出。 您已按half hour time intervals
和weather description
行进行了分组。 您有10:00 time interval
两种不同天气:“清除”和“雨”,以及10:30 time interval
一种天气:“清除”。 如果要从GROUP BY
子句中删除weather_description列,则只会得到两行。
common table expressions
解决方案仅显示在该时间间隔内最频繁发生的天气描述。
;WITH temp_data AS(
SELECT AVG(current_temperatures) AS temp_avg,
CASE WHEN strftime('%M', time_stamp) < '30'
THEN strftime('%H', time_stamp)
ELSE strftime('%H', time_stamp, '+1 hours') END as hour,
current_weather_description,
count(*) as counter
FROM weather_events
GROUP BY strftime('%H', time_stamp, '+30 minutes'),
current_weather_description
)
SELECT T1.* FROM temp_data AS T1
WHERE T1.counter = (SELECT MAX(counter) FROM temp_data AS T2
WHERE T2.hour = T1.hour)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.