我有以下查询
SELECT channel_type,
AVG(delay_in_seconds)
FROM a_table
WHERE started_at BETWEEN '2014-10-17 00:00:00' AND '2014-10-17 23:59:59'
GROUP BY channel_type;
目前,如果我想在过去10周的一周间隔内运行此查询,我需要运行10个单独的查询并手动更改间隔。这样做会更优雅吗?
答案 0 :(得分:0)
我不认为SQL具有您在这种情况下寻找的灵活性(尽管我可能错了)。我不久前需要类似的东西,只需要一遍又一遍地运行查询。如果您担心改进,可以将查询转为存储过程。
答案 1 :(得分:0)
考虑将查询放在脚本语言中并将结果输出到报告文件。 Python的MySqlDb库非常易于使用。
答案 2 :(得分:0)
如果你想要一些可以每天运行的东西:
SELECT channel_type, AVG(delay_in_seconds)
FROM a_table
WHERE started_at BETWEEN CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59')
GROUP BY channel_type;
如果您需要每周摘要:
SELECT channel_type, WEEK(started_at) AS week, AVG(delay_in_seconds)
FROM a_table
GROUP BY channel_type, week;
如果您每天需要摘要:
SELECT channel_type, DATE(started_at) AS dt, AVG(delay_in_seconds)
FROM a_table
GROUP BY channel_type, dt;
答案 3 :(得分:0)
尝试以下方法。
SELECT channel_type,AVG(delay_in_seconds),weeknum
FROM (
SELECT channel_type, delay_in_seconds,WEEK(started_at) as weeknum
FROM a_table
)
GROUP BY channel_type, weeknum;
唯一的问题是你可以获得所有周的结果。在计算周数后,可以在内部查询中添加子句。例如
其中周数> 25或等等