2010-05-13 89 views
0

事件考勤数据(时间戳,事件),我有一个表: ID,日期时间,事件MySQL的 - 集计算每

我也有表日期: 日期(年月日格式)

问题是有些日子没有任何事件,我想他们表现出0(或空)

SELECT DATE_FORMAT(table.timestamp, '%Y-%m-%d') ydm, count(table.fkUID) FROM `table` where table.fkUID=$var group by ydm; 

是有一些方法来加入或使用条件语句,使结果表明:

date|count 
---------- 
2010-05-23| 5 
2010-05-24| 0 <--- this line just doesn't exist in my query. 
2010-05-26| 3 

回答

2
select d.date,count(e.timestamp) 
from dates d 
left join events e on d.date=DATE_FORMAT(e.timestamp,'%Y-%m-%d') 
group by d.date; 

我没有环境测试,我不知道,我清楚的问题,但这里是我的猜测。

+0

左加盟将确保没有行将从日期表错过。这些事件将按日期进行计算。 – Notinlist 2010-05-13 17:50:37

+0

我试过了,它没有添加零时间那天没有事件时间戳。尽管如此,它比我现有的代码更清洁。 – 2010-05-13 18:19:04

+0

请注意,您也可以使用'd.date = DATE(e.timestamp)'。 – 2010-05-13 18:20:19

0

接受的智慧似乎是,你必须创建一个包含你感兴趣的所有日期的名单表,然后做一个外与你有看法加入上。糟透了,我知道。