Mysql 即使存在';It’那时候没有入场券

Mysql 即使存在';It’那时候没有入场券,mysql,time,time-series,missing-data,Mysql,Time,Time Series,Missing Data,我有一个查询,它获取平均值,并按15分钟从上午12点到晚上11点45分对值进行分组 SELECT FROM_UNIXTIME(t_stamp/1000, '%m/%d/%Y %l:%i %p') as t_stamp, ROUND(AVG(CASE WHEN id = '001' THEN value END),2) Value1, ROUND(AVG(CASE WHEN id = '002' THEN value END),2) Value2, ROUND(AVG

我有一个查询,它获取平均值,并按15分钟从上午12点到晚上11点45分对值进行分组

SELECT FROM_UNIXTIME(t_stamp/1000, '%m/%d/%Y %l:%i %p') as t_stamp,
    ROUND(AVG(CASE WHEN id = '001' THEN value END),2) Value1,   
    ROUND(AVG(CASE WHEN id = '002' THEN value END),2) Value2,
    ROUND(AVG(CASE WHEN id = '003' THEN value END),2) Value3

FROM table1
WHERE tagid IN ("001", "002", "003") and

date(from_unixtime(t_stamp/1000)) BETWEEN "2014-05-01" AND "2014-05-01"

GROUP BY DATE(from_unixtime(t_stamp/1000)), HOUR(from_unixtime(t_stamp/1000)), MINUTE(from_unixtime(t_stamp/1000))  DIV 15
输出如下所示

    t_stamp             |   Value1  |   Value2  |   Value3
05/01/2014 12:00 AM     |   199     |   99      |   100
05/01/2014 12:15 AM     |   299     |   19      |   140
05/01/2014 12:30 AM     |   399     |   59      |   106
05/01/2014 12:45 AM     |   499     |   59      |   112
.
.
.
05/01/2014 11:00 PM     |   149     |   199     |   100
05/01/2014 11:15 PM     |   599     |   93      |   123
05/01/2014 11:30 PM     |   129     |   56      |   150
05/01/2014 11:45 PM     |   109     |   60      |   134
它工作得很好,但我注意到,有时如果没有进入,比如12:30,而不是显示

    t_stamp             |   Value1  |   Value2  |   Value3
05/01/2014 12:00 AM     |   199     |   99      |   100
05/01/2014 12:15 AM     |   299     |   19      |   140
05/01/2014 12:30 AM     |   Null    |   Null    |   Null
05/01/2014 12:45 AM     |   499     |   59      |   112
它将显示一组时间,如下所示:

    t_stamp             |   Value1  |   Value2  |   Value3
05/01/2014 12:00 AM     |   199     |   99      |   100
05/01/2014 12:15 AM     |   299     |   19      |   140
05/01/2014 12:33 AM     |   122     |   141     |   234
05/01/2014 12:45 AM     |   499     |   59      |   112
    t_stamp             |   Value1  |   Value2  |   Value3
05/01/2014 12:00 AM     |   199     |   99      |   100
05/01/2014 12:15 AM     |   299     |   19      |   140
05/01/2014 12:30 AM     |   Null    |   Null    |   Null
05/01/2014 12:45 AM     |   499     |   59      |   112
我希望发生的是,当15分钟组没有时间时,它仍然会显示正确的时间集,然后在列值上显示null。我想要的输出如下:

    t_stamp             |   Value1  |   Value2  |   Value3
05/01/2014 12:00 AM     |   199     |   99      |   100
05/01/2014 12:15 AM     |   299     |   19      |   140
05/01/2014 12:33 AM     |   122     |   141     |   234
05/01/2014 12:45 AM     |   499     |   59      |   112
    t_stamp             |   Value1  |   Value2  |   Value3
05/01/2014 12:00 AM     |   199     |   99      |   100
05/01/2014 12:15 AM     |   299     |   19      |   140
05/01/2014 12:30 AM     |   Null    |   Null    |   Null
05/01/2014 12:45 AM     |   499     |   59      |   112
我该怎么做


谢谢。

您需要一个包含基数的表格作为开始。现在让我们假设它存在,它被称为
cardinal

然后,您需要创建一个查询(虚拟表),该查询将每隔十五分钟返回带有时间戳的行,从最早的相关时间戳开始,以最晚的时间戳结束。下面是如何为您的查询执行此操作

SELECT '2014-05-01' + INTERVAL (cardinal.n * 15) MINUTE as t_stamp
  FROM cardinal
 WHERE cardinal.n <= 24*4
这是一篇关于这个话题的文章。