【问题标题】:MYSQL - Would like to iterate through dates located in 1 table, and count how many records in anotherMYSQL - 想遍历位于 1 个表中的日期,并计算另一个表中有多少条记录
【发布时间】:2014-09-20 00:10:49
【问题描述】:

我有 2 张桌子。 DateTable 是一个只有日期的表格。 RecordTable 是一个包含 4000 万条唯一记录的表。

在 RecordTable 中,每条记录都有一个 StartDate 和一个 EndDate。

我想遍历 DateTable,并计算 RecordTable 中有多少条记录,其中 DateTable 中的日期在 StartDate 和 EndDate 之间。

示例 - DateTable 有以下 2 条记录: 2014-07-27 2014-07-28

我首先想知道 RecordTable 中 2014-07-27 在 StartDate 和 EndDate 之间的记录数。

然后我希望下一行显示 RecordTable 中 2014-07-28 介于 StartDate 和 EndDate 之间的记录数。

这是一个循环吗?还是他们在查询中的一种方式?

【问题讨论】:

    标签: mysql date loops count between


    【解决方案1】:

    这是两个单独的查询。你对两者都有正确的想法。 您将不得不单独运行数据集,然后在浏览器端使用您喜欢的任何内容来显示结果。

    【讨论】:

      【解决方案2】:

      如果我正确理解您的问题,您可以将 DateTable 加入 RecordTable 并简单地进行计数。

      SELECT DateTable.TheDate, COUNT(*)
      INNER JOIN RecordTable ON
        DateTable.TheDate BETWEEN RecordTable.StartDate AND RecordTable.EndDate
      GROUP BY DateTable.TheDate
      

      请注意,这将省略所有在 RecordTable 中不匹配的 DateTable 行。

      如果您想在 DateTable 中的日期与 RecordTable 中的任何行都不匹配时显示零计数,您需要根据 RecordTable 列值左连接和计数(这很难解释,但它是基于事实上COUNT 忽略空值):

      SELECT DateTable.TheDate, COUNT(RecordTable.StartDate)
      LEFT JOIN RecordTable ON
        DateTable.TheDate BETWEEN RecordTable.StartDate AND RecordTable.EndDate
      GROUP BY DateTable.TheDate
      

      【讨论】:

      • 这不起作用。说我的语法错误。具体语法是 SELECT activedates.activedates, count(*) INNER JOIN jobs ON activedates.activedates BETWEEN jobs.created AND jobs.last_checked GROUP BY activedates.activedates
      猜你喜欢
      • 1970-01-01
      • 2011-05-12
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 2019-06-27
      相关资源
      最近更新 更多