不确定如何正确执行此操作。我整个早上都在搞乱 JOINS。我所能得到的只是日期范围,但日期只是重复应该为空白的日期。
这是一个基本的查询
SELECT `time`,`protocal`,(`octet`/1024) as `octet10243`,`percent`,`div`,FROM_UNIXTIME(`time`, '%Y-%m-%d') as `newtime3` FROM ipport
WHERE FROM_UNIXTIME(`time`, '%Y-%m-%d') >= '2011-01-05' AND FROM_UNIXTIME(`time`, '%Y-%m-%d') <= '2011-01-08' AND (`protocal` = 'Echo' ) AND `div` = 'XDIV'
这是结果。
"time";"protocal";"octet10243";"percent";"div";"newtime3"
"1290923100";"Echo";"92844.07421875";"1.04435";"XDIV";"2011-01-06"
"1291009500";"Echo";"95110.106445312";"1.0796";"XDIV";"2011-01-07"
我有另一个表,日期从 2011-01-01 到 2011-01-17。我用它来加入。
这就是我要找的结果。
"time";"protocal";"octet10243";"percent";"div";"newtime3"
"0";"Echo";"0";"0";"XDIV";"2011-01-05"
"1290923100";"Echo";"92844.07421875";"1.04435";"XDIV";"2011-01-06"
"1291009500";"Echo";"95110.106445312";"1.0796";"XDIV";"2011-01-07"
"0";"Echo";"0";"0";"XDIV";"2011-11-08"
这是我在 JOINing 中积累的尝试...
SELECT makeupdate.date, FROM_UNIXTIME(ipport.time, '%Y-%m-%d'),`time`,`protocal`,(`octet`/1024) as `octet10243`,`percent`,`div`,FROM_UNIXTIME(`time`, '%Y-%m-%d')
as `newtime3` FROM ipport JOIN makeupdate ON FROM_UNIXTIME(ipport.time, '%Y-%m-%d') >= '2011-01-05'
AND FROM_UNIXTIME(ipport.time, '%Y-%m-%d') <= '2011-01-08' AND (`protocal` = 'Echo' ) AND `div` = 'XDIV'
感谢帮助
最佳答案
从您的日期表开始,然后左连接到您的 ipport 表,这样您就可以将日期表中的所有行与 ipport 表中的匹配行结合起来。
SELECT m.date, FROM_UNIXTIME(i.time, '%Y-%m-%d'),`time`,`protocal`,(`octet`/1024) as `octet10243`,`percent`,`div`,FROM_UNIXTIME(`time`, '%Y-%m-%d') as `newtime3`
FROM makeupdate m
LEFT JOIN ipport i
on m.date = FROM_UNIXTIME(ipport.time, '%Y-%m-%d')
AND (`protocal` = 'Echo' )
AND `div` = 'XDIV'
WHERE m.date >= '2011-01-05' AND m.date <= '2011-01-08'
关于sql - mysql连接创建缺失日期的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716016/