我想从表中已经存在的时间戳中为表中的不同日期添加虚拟时间戳。

我知道我可以使用外部Join来完成此操作,但到目前为止我还没有成功。仍然对如何执行此操作感到困惑。这是我到目前为止想出的

     SELECT time_stamp from tbl
 OUTER JOIN y
 SELECT y.time_stamp =
       SELECT DISTINCT DATE_FORMAT(time_stamp, '%Y-%m-%d') FROM tbl ORDER BY DATE(time_stamp) ASC


原始表格将如下所示

timestamp           phase_1 phase_2 phase_3
2014-03-04 12:00:00   0       0        0
2014-03-05 02:00:00   0       0        0
2014=03-06 01:00:00   0       0        0
2014-03-07 00:00:00   0       0        0


查询的结果应该是这样的

timestamp           phase_1 phase_2 phase_3
2014-03-04 00:00:00   0       0        0
2014-03-04 12:00:00   0       0        0
2014-03-05 00:00:00   0       0        0
2014-03-05 02:00:00   0       0        0
2014=03-06 00:00:00   0       0        0
2014=03-06 01:00:00   0       0        0
2014-03-07 00:00:00   0       0        0


我知道可以使用OUTER JOIN查询来完成,但是我不知道如何做到。也许还有更好的方法可以做到这一点。

最佳答案

您正在寻找一种方法来包含每个DATE(在00:00:00),除非该日期(在00:00:00)已经存在。

select
        `timestamp`
      , phase_1
      , phase_2
      , phase_3
from table1

union

select
        date(`timestamp`)
      , phase_1
      , phase_2
      , phase_3
from table1

order by
        `timestamp`


它会将每个timestamp“截断”到一个日期,然后使用UNION删除所有重复项。

因此,从此:

timestamp           phase_1 phase_2 phase_3
2014-03-04 12:00:00   0       0        0
2014-03-05 02:00:00   0       0        0
2014=03-06 01:00:00   0       0        0
2014-03-07 00:00:00   0       0        0


它将产生这个

timestamp           phase_1 phase_2 phase_3
2014-03-04 00:00:00   0       0        0     --<< new
2014-03-04 12:00:00   0       0        0
2014-03-05 00:00:00   0       0        0     --<< new
2014-03-05 02:00:00   0       0        0
2014-03-06 00:00:00   0       0        0     --<< new
2014-03-06 01:00:00   0       0        0
2014-03-07 00:00:00   0       0        0


参见:http://sqlfiddle.com/#!9/c743a4/2

关于mysql - 具有“选择查询”结果的外部联接一个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25226119/

10-10 17:55
查看更多