2014-10-17 86 views
0

我有以下查询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个独立的查询和手动改变间隔。这将是一个更优雅的做法呢?

回答

0

我不认为SQL在这种情况下具有您寻找的灵活性(尽管我可能是错的)。我不久前需要一个类似的东西,只需要反复运行查询。如果您担心改进,则可以将查询转换为存储过程。

0

考虑将查询放在脚本语言中并将结果输出到报告文件。 Python的MySqlDb库非常易于使用。

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; 
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或等于