3

我想检索过去 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 中做到这一点?

4

1 回答 1

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 ...这是为此存储的过程:

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

然后你还需要一个内部连接......所以你会在 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$$
于 2012-05-29T18:27:57.607 回答