我有一个日志表,用于存储act_datetime,app_id,location_id,media_id和media_type_id的媒体请求。我想要的是每个结果集行包含每个月的类型总计。例如,日志记录包含:
我尝试使用临时表按app_id提取记录并按月分组,但每次总计得到多行。我可以使用子查询,但是如何按类型获取每个月的总行数?
非常感谢任何帮助。
谢谢,
布兰登
修改
以下代码结合了共享的想法:
此查询大约需要13秒来解析大约810万行。那可以接受吗?最后,如何将2018-1的日期显示为一列?我在转换为字符串时遇到错误,因为日期也在组中使用,并按子句排序。
我也想尝试代码构造总和(当media_type_id = 1然后1,否则0结束时的情况)......看看是否获得相同的结果和速度。
感谢大家的帮助!
答案 0 :(得分:0)
假设这是SQL Server,而不是MySQL:
SELECT DATEPART(MONTH, act_datetime) AS [Month],
COUNT(CASE WHEN app_id = 14 AND media_type_id = 1 AND location_id = 1 THEN act_datetime END) AS MP3_Messages_MO,
COUNT(CASE WHEN app_id = 14 AND media_type_id = 1 AND location_id = 2 THEN act_datetime END) AS MP3_Messages_FL,
COUNT(CASE WHEN app_id = 14 AND media_type_id = 3 AND location_id = 1 THEN act_datetime END) AS MP3_Messages_MO,
COUNT(CASE WHEN app_id = 14 AND media_type_id = 3 AND location_id = 2 THEN act_datetime END) AS MP3_Messages_FL,
COUNT(CASE WHEN app_id = 55 AND media_type_id = 1 THEN act_datetime END) AS MP3_Music,
COUNT(CASE WHEN app_id = 55 AND media_type_id = 9 THEN act_datetime END) AS ZIP_Music
FROM YourTable
GROUP BY DATEPART(MONTH, act_datetime);
请注意,您已经包含了不同年份的逻辑,每个月的数据都会计算,无论年份如何。
由于缺少耗材数据,这也完全未经测试。