根据日期计算/分组行,包括缺失

     2023-03-30     94

关键词:

【中文标题】根据日期计算/分组行,包括缺失【英文标题】:Count/group rows based on date including missing 【发布时间】:2013-09-25 10:57:56 【问题描述】:

我的数据库中有一堆表示订单的行,即

id | date
---------------------
1  | 2013-09-01
2  | 2013-09-01
3  | 2013-09-02
4  | 2013-09-04
5  | 2013-09-04

我想要显示每天的行数,包括缺失的天数,所以输出是:

2013-09-01 | 2
2013-09-02 | 1
2013-09-03 | 0
2013-09-04 | 2

我已经看到有 2 个表的示例,一个带有记录,另一个带有日期,但理想情况下我希望有一个单独的表。

我目前可以找到有记录的行,但找不到没有记录的日期。

有人知道怎么做吗?

谢谢

【问题讨论】:

如果您的日期范围不受某种限制,唯一好的选择是拥有两个表(一个带日期),因为 MySQL 不支持序列。 限制显示最近7天的订单。 重复:***.com/questions/11078798/… 【参考方案1】:

如果要获取最近 7 天的数据,可以通过UNION 生成伪表,例如:

SELECT 
  COUNT(t.id), 
  fixed_days.fixed_date 
FROM t 
  RIGHT JOIN 
  (SELECT CURDATE() as fixed_date 
   UNION ALL SELECT CURDATE() - INTERVAL 1 day 
   UNION ALL SELECT CURDATE() - INTERVAL 2 day 
   UNION ALL SELECT CURDATE() - INTERVAL 3 day 
   UNION ALL SELECT CURDATE() - INTERVAL 4 day 
   UNION ALL SELECT CURDATE() - INTERVAL 5 day 
   UNION ALL SELECT CURDATE() - INTERVAL 6 day) AS fixed_days 
  ON t.`date` = `fixed_days`.`fixed_date`
GROUP BY 
  `fixed_days`.`fixed_date`

-看到这个fiddle demo。请注意,如果您的字段是 DATETIME 日期类型,那么您需要先申请 DATE()

SELECT 
  COUNT(t.id), 
  fixed_days.fixed_date 
FROM t 
  RIGHT JOIN 
  (SELECT CURDATE() as fixed_date 
   UNION ALL SELECT CURDATE() - INTERVAL 1 day 
   UNION ALL SELECT CURDATE() - INTERVAL 2 day 
   UNION ALL SELECT CURDATE() - INTERVAL 3 day 
   UNION ALL SELECT CURDATE() - INTERVAL 4 day 
   UNION ALL SELECT CURDATE() - INTERVAL 5 day 
   UNION ALL SELECT CURDATE() - INTERVAL 6 day) AS fixed_days 
  ON DATE(t.`date`) = `fixed_days`.`fixed_date`
GROUP BY 
  `fixed_days`.`fixed_date`

【讨论】:

无论日期范围内是否没有行,都会为每一行返回1 如果字段是datetime 怎么办?更改 SQL 容易吗?【参考方案2】:

试试这样的东西!

SELECT 
  c1,  
  GROUP_CONCAT(c2 ORDER BY c2) AS 'C2 values' 
FROM table 
GROUP BY c1; 

要检索在另一列 c2 中存在特定值的 c1 值列表,您需要一个指定 c2 值的 IN 子句和一个指定列表中不同项目所需数量的 HAVING 子句。 .

SELECT c1  
FROM table 
WHERE c2 IN (1,2,3,4) 
GROUP BY c1 
HAVING COUNT(DISTINCT c2)=4; 

有关此相关问题的更多帮助

Counting all rows with specific columns and grouping by week

【讨论】:

【参考方案3】:

使用下面的存储过程可以让你得到超过7天的结果,只要传递你想要的天数

DELIMITER $$

CREATE DEFINER=`server`@`%` PROCEDURE `test`(d INT)
BEGIN

    CREATE TEMPORARY TABLE dates 
    (
      f_day DATETIME
    );

    WHILE d > 0 DO
        INSERT INTO dates SELECT DATE(NOW())-d;
        SET d = d - 1;
    END WHILE;

    SELECT 
        IF(isnull(`id`),0,`id`), 
        `fixed_days`.`f_day`
    FROM t 
    RIGHT JOIN 
        dates AS `fixed_days` 
        ON t.`date` = `fixed_days`.`f_day`
    GROUP BY 
    `fixed_days`.`f_day`;

    DROP TABLE dates;
END

【讨论】:

GroupBy 聚合,包括 mongo 中的缺失日期

】GroupBy聚合,包括mongo中的缺失日期【英文标题】:GroupByAggregationincludingmissingdatesinmongo【发布时间】:2021-10-1015:39:02【问题描述】:我有一个聚合查询,当某个日期范围已过时,它会给我一个按日期分组的结果。示例聚合管道... 查看详情

计算平均值 (AVG),包括 Redshift DB 中某个日期范围内的缺失数据

】计算平均值(AVG),包括RedshiftDB中某个日期范围内的缺失数据【英文标题】:Calculateaverage(AVG)includingmissingdatainadaterangeinRedshiftDB【发布时间】:2020-08-1320:55:50【问题描述】:考虑我有以下一组数据s_date|sales------------+-------2020-08-04|... 查看详情

根据 ID 对行进行分组,然后返回每个 ID 分组中日期最短的行 [重复]

】根据ID对行进行分组,然后返回每个ID分组中日期最短的行[重复]【英文标题】:grouprowsbasedonIDandthenreturntherowwiththelowestdateperIDgrouping[duplicate]【发布时间】:2013-10-1203:03:21【问题描述】:假设您有一个包含3列的数据集:ID、用户... 查看详情

填写缺失的日期值并根据前一行填充第二列

】填写缺失的日期值并根据前一行填充第二列【英文标题】:Fillinmissingdatevaluesandpopulatesecondcolumnbasedonpreviousrow【发布时间】:2020-02-2816:39:16【问题描述】:我有一个包含2列的csv,其中一个包含日期,第二列包含速率值。该文件... 查看详情

MySQL查询根据按月分组的激活日期计算累积用户数

】MySQL查询根据按月分组的激活日期计算累积用户数【英文标题】:MySQLquerytocountcumulativeusernumberbasedonactivationdategrouppedbymonth【发布时间】:2020-10-2020:14:22【问题描述】:我有以下表格和数据:CREATETABLEtbl_users(`id`int(11)NOTNULLPRIMARYKE... 查看详情

如何获取日期范围内的缺失值?

】如何获取日期范围内的缺失值?【英文标题】:Howtogetmissingvaluesindaterange?【发布时间】:2014-09-1617:08:44【问题描述】:我有以下结构的表:我正在尝试获取两个日期之间的分组值,问题是,我还希望为未选择的日期重新调整行... 查看详情

如何根据条件对sql中的行进行分组

】如何根据条件对sql中的行进行分组【英文标题】:Howcanigrouprowsonsqlbaseoncondition【发布时间】:2021-07-1608:00:49【问题描述】:我正在使用redshiftsql,并希望将凭证期重叠的用户分组到一行中(显示最短开始日期和最长结束日期)... 查看详情

选择日期范围,根据关闭条件计算范围内的多条记录,按班次分组

】选择日期范围,根据关闭条件计算范围内的多条记录,按班次分组【英文标题】:PickDateRange,CountmultipleRecordsinrangebasedoffcondition,groupbyshift【发布时间】:2014-02-0617:15:07【问题描述】:所以我是SQLWorld的新手,所以请原谅这个问... 查看详情

Oracle 按时间段对合格行进行分组,包括零计数

...个Oracle10g表,它记录了我系统上的所有响应时间。如何按日期获取计数缓慢的交易,包括没有交易缓慢的日期的零计数?举个例子createtableresponse_times(system 查看详情

比较两个 MYSQL 表并按列返回缺失的日期和分组

】比较两个MYSQL表并按列返回缺失的日期和分组【英文标题】:ComparetwoMYSQLtablesandreturnmissingdatesandgroupbycolumn【发布时间】:2020-12-1213:37:41【问题描述】:我有两张桌子。我想将表A与B进行比较,并从用户名中获取缺失的日期。表A... 查看详情

需要在日期期间计算行数,然后根据该日期期间使用其他条件计算行数

】需要在日期期间计算行数,然后根据该日期期间使用其他条件计算行数【英文标题】:Needtocountrowsduringadateperiodthencountrowsbasedonwhatthatdateperiodisusingotherconditions【发布时间】:2016-12-1221:36:50【问题描述】:我正在尝试计算订阅流... 查看详情

s-s-rS - 根据行数据的计算值对行集进行分组

】s-s-rS-根据行数据的计算值对行集进行分组【英文标题】:s-s-rS-Groupsetofrowsbasedoncalculatedvaluefromtherow\'sdata【发布时间】:2016-02-0116:41:55【问题描述】:我想根据对某一行的列数据的计算对一组行进行分组(显示)。假设我的tabli... 查看详情

根据条件对 pyspark 行进行分组

】根据条件对pyspark行进行分组【英文标题】:groupingpysparkrowsbasedoncondtion【发布时间】:2021-06-1422:12:04【问题描述】:我有这个有6列的表,我想根据“记录”字段按“ID1”和“ID2”对行进行分组。我的记录字段是“IN”或“OUT”... 查看详情

在分组后为缺失的行添加零值

】在分组后为缺失的行添加零值【英文标题】:Addingvalueofzeroformissingrowsafteragroupby【发布时间】:2021-12-2914:32:59【问题描述】:我有一个pandas数据框,假设我的数据会跟踪进入我商店的人。我的数据如下:NamemonthdayhourAlbertOctober31... 查看详情

分组分类并计算特征中的缺失值

】分组分类并计算特征中的缺失值【英文标题】:Groupbyclassandcountmissingvaluesinfeatures【发布时间】:2019-05-2514:38:27【问题描述】:我有一个问题,我在网络或文档中找不到任何解决方案,即使我认为这很微不足道。我想做什么?... 查看详情

计算按某些行分组的出现次数

...造商返回的带有一些状态代码的订单我知道),按产品、日期和存储,看起来像这个:SELECTcount(*)asout_of_stock,prod.idasproduct_id,ped.data_envio::da 查看详情

添加缺失的报告日期,不包括具有指定值的周末

】添加缺失的报告日期,不包括具有指定值的周末【英文标题】:AddMissingReportDatesExcludingWeekendswithSpecifiedValues【发布时间】:2018-05-1019:21:40【问题描述】:我的表格中有很多报告空白(缺少报告日期)。我想通过将缺少的报告日... 查看详情

如何计算按多个日期分组的行(在 Symfony 中)?

】如何计算按多个日期分组的行(在Symfony中)?【英文标题】:howtocountrowsgroupedbymultipledates(InSymfony)?【发布时间】:2022-01-1321:14:43【问题描述】:我正在尝试count过去3天我有多少行,例如我有这个表名为tab:iddate12021-12-0922021-12-... 查看详情