我想要检索过去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中完成?
答案 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$$