mysql - 返回最近N天的记录,当不是N中的每一天都有记录?

标签 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 中完成此操作?

最佳答案

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/

相关文章:

mysql - 使用 LEFT JOINS 优化 MySql 查询

java - 在 MYSQL 查询中传递空白/非空变量(使用 Java)

database - 可以将数据库从 PostgreSQL 导出到您的计算机硬盘上

mysql - 无法连接到 sphinx 数据库

MySQL 表已满 (InnoDB) - 错误 #1114

ruby-on-rails - 在 ruby​​ on rails 中使用相同的 2 个表的多个一对多关系?

mysql - 当 ON 语句为 false 时表连接是否有效?

mysql - 从 MyISAM 迁移到 Innodb 时代码发生变化

mysql - 使用openshift在mysql数据库上访问被拒绝

database - Rails gem - 数据库 web 界面