我想检索用户过去 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 中完成此操作?
最佳答案
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...这是为此的存储过程:
我使用的日期格式只能识别年份和月份,但您可以更改它...
然后您还需要一个内部联接...所以您可以在 date_reference 表上执行一个内部联接,它会吐出上面评论中提到的结果。
分隔符 $$
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$$
关于mysql - 返回最近N天的记录,当不是N中的每一天都有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10804563/