MySQL以多个时间间隔执行查询

时间:2014-10-17 19:31:00

标签: mysql

我有以下查询

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个单独的查询并手动更改间隔。这样做会更优雅吗?

4 个答案:

答案 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或等等