返回N天的记录,当N不是每天都有记录?

时间:2012-05-29 18:21:40

标签: mysql database

我想要检索过去7天内用户的活动。我查询的表是多对多的,链接用户,事件和日期。

如果今天是5月7日,但是用户只记录了5月4日和2日的活动,我是否可以构建一个返回与未记录活动日期相对应的NULL的查询?

来源

May 2     42
May 4     88

所需输出

May 1     NULL
May 2     42
May 3     NULL
May 4     88
May 5     NULL
May 6     NULL
May 7     NULL

如何在MySQL中完成?

1 个答案:

答案 0 :(得分:0)

SELECT DISTINCT users, events, dates
FROM table
WHERE dates between date_format(date1, '%Y-%m-%d')
and date_format(date2, '%Y-%m-%d')    or NOW() or CURDATE()....
and user = 'username'

这是非常一般的,但是如果你替换名称和日期(可能不需要为你的目的格式化),这将返回所有结果,无论空占位符

您可以填充date_reference_table ...这里是存储的proc:

我使用日期格式仅识别年份和月份,但您可以更改此...

你还需要一个内连接......所以你要在date_reference表上做一个内连接,它会吐出上面评论中提到的结果。

delimiter $$

CREATE PROCEDURE `generate_date_reference_table`(d1 date, d2 date)
BEGIN
declare d datetime;

create table BLMBP.date_reference (d char(7) not null);

set d = d1;
while d <= d2 do
    insert into BLMBP.date_reference (d) values (date_format(d, '%Y-%m'));
    set d = date_add(d, interval 1 month);
end while;

END$$