繁体   English   中英

SQLite:子查询按最大计数分组

[英]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 intervalsweather 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM