我想从表中已经存在的时间戳中为表中的不同日期添加虚拟时间戳。
我知道我可以使用外部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/