我想从表中已存在的时间戳添加表中不同日期的虚拟时间戳。
我知道我可以使用外部联接来完成此任务,但到目前为止我还没有成功。仍然对如何做到这一点感到困惑。这是我到目前为止所提出的
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查询完成,但我无法弄清楚如何。也许还有一种更好的方法可以做到这一点。
答案 0 :(得分:0)
SELECT time_stamp from tbl
OUTER JOIN y
SELECT y.time_stamp in(
SELECT DISTINCT DATE_FORMAT(time_stamp, '%Y-%m-%d') FROM tbl ORDER BY DATE(time_stamp) ASC )
使用' IN'
的最佳方式之一答案 1 :(得分:0)
您正在寻找一种方法来包含每个日期(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