[英]Outer Join One table with result of Select Query
我想从表中已经存在的时间戳中为表中的不同日期添加虚拟时间戳。
我知道我可以使用外部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查询来完成,但是我不知道如何做到。 也许还有更好的方法可以做到这一点。
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”的最佳方法之一
您正在寻找一种方法来包含每个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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.