为什么mysql查询没有记录,MySQL查询-包括没有记录的日期

I have a report that displays a graph. The X axis uses the date from the below query. Where the query returns no date, I am getting gaps and would prefer to return a value. Is there any way to force a date where there are no records?

SELECT

DATE(instime),

CASE

WHEN direction = 1 AND duration > 0 THEN 'Incoming'

WHEN direction = 2 THEN 'Outgoing'

WHEN direction = 1 AND duration = 0 THEN 'Missed'

END AS type,

COUNT(*)

FROM taxticketitem

GROUP BY

DATE(instime),

CASE

WHEN direction = 1 AND duration > 0 THEN 'Incoming'

WHEN direction = 2 THEN 'Outgoing'

WHEN direction = 1 AND duration = 0 THEN 'Missed'

END

ORDER BY DATE(instime)

解决方案

One possible way is to create a table of dates and LEFT JOIN your table with them. The table could look something like this:

CREATE TABLE `datelist` (

`date` DATE NOT NULL,

PRIMARY KEY (`date`)

);

and filled with all dates between, say Jan-01-2000 through Dec-31-2050 (here is my Date Generator script).

Next, write your query like this:

SELECT datelist.date, COUNT(taxticketitem.id) AS c

FROM datelist

LEFT JOIN taxticketitem ON datelist.date = DATE(taxticketitem.instime)

WHERE datelist.date BETWEEN `2012-01-01` AND `2012-12-31`

GROUP BY datelist.date

ORDER BY datelist.date

LEFT JOIN and counting not null values from right table's ensures that the count is correct (0 if no row exists for a given date).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值