Java 获取过去7天的数据,如果没有特定日期的数据,则返回0

Java 获取过去7天的数据,如果没有特定日期的数据,则返回0,java,mysql,sql,Java,Mysql,Sql,我想获取过去1周(7天)的数据,包括所有天数。当没有特定日期的数据时,应返回零 这就是我目前所拥有的 "SELECT DATE(date) AS created_date, SUM(quantity) AS total_amount " + "FROM milk_collection " + "WHERE DATE(date) > DATE_SUB(DATE(NOW()), INTERVAL 30 DAY) " + "GROUP BY created_date"; 问题是,如果找不到当天

我想获取过去1周(7天)的数据,包括所有天数。当没有特定日期的数据时,应返回零

这就是我目前所拥有的

"SELECT DATE(date) AS created_date, SUM(quantity) AS total_amount " +
"FROM milk_collection " +
"WHERE DATE(date) > DATE_SUB(DATE(NOW()), INTERVAL 30 DAY) " +
"GROUP BY created_date";

问题是,如果找不到当天的记录,此查询不会返回零(0)。

这是一个针对“”的经典应用程序。要为某些键值获取零值,您需要确保这些键值出现在一个表中,您可以将该表左键连接到值表

创建每个日期包含一行的表:

create table calendar ( cal_date date );

然后用您感兴趣的范围内的所有日期填充它。最后左键将其连接到查询中日期列上的
milk\u collection
。这将保证您在所选范围内的每个日期至少有一行,对于没有数据的日期,
数量
列中为空。

试试看,我不确定这是否有效,因为我的系统没有安装MySQL

"SELECT DATE(date) AS created_date, SUM(IFNULL(quantity,0)) AS total_amount " +
"FROM milk_collection " +
"WHERE DATE(date) > DATE_SUB(DATE(NOW()), INTERVAL 30 DAY) " +
"GROUP BY created_date";

感谢@Jim Garrison的指导,我能够提出一个完全符合我要求的查询。希望这篇文章能帮助有类似问题的人,节省他们的时间

SQL


或者只处理应用程序级代码中缺少日期的逻辑,该代码仅在记录可用时返回0,但保留空值,而不是在记录不可用时(如在我的案例中),您可以提供一些信息,如显示表状态的案例,以及预期结果。
"SELECT DATE(D) AS temporary_date, SUM(IFNULL(quantity,0)) AS total_amount, DATE(date) AS created_date "+ 
"FROM "+ 
   "( SELECT DATE_SUB(NOW(), INTERVAL D DAY) AS D "+ 
    " FROM (SELECT 0 as D "+ 
              "UNION SELECT 1 "+ 
              "UNION SELECT 2 "+ 
              "UNION SELECT 3 "+ 
              "UNION SELECT 4 "+ 
              "UNION SELECT 5 "+ 
              "UNION SELECT 6 ) AS D ) AS D "+ 
"LEFT JOIN milk_collection ON DATE(date) = date(D) "+ 
"GROUP BY temporary_date ORDER BY D ASC ";