【问题标题】:Mysql Sum column of overlap dates between 2 tables2个表之间重叠日期的Mysql Sum列
【发布时间】:2017-09-16 12:38:01
【问题描述】:

表 A 按天存储每个库存数量:

  +---+------------+----------+-------------+
  |id | Stock_id   | amount   |  Date       |
  +---+------------+----------+-------------+
  | 1 |          1 |      100 | 2017-09-05  |
  | 2 |          1 |      200 | 2017-09-06  |
  | 3 |          1 |      300 | 2017-09-07  |
  | 4 |          1 |      200 | 2017-09-08  |
  | 5 |          1 |      200 | 2017-09-09  |
  | 6 |          1 |      200 | 2017-09-10  |
  | 7 |          2 |      300 | 2017-09-06  |
  +---+------------+----------+-------------+

表 B 包含股票 id 和类别之间的关系。添加日期表示库存添加到类别的时间,删除日期表示库存被删除的日期。如果 remove date 为 null ,则表示该库存仍在该类别中。

  +---+----------+  ------- +------------+------------+
  |id | Stock_id |Category  | Add Date   | Remove Date|
  +---+----------+--------  +------------+------------+
  | 1 |        1 | Category1| 2017-09-03 | 2017-09-07 |
  | 2 |        1 | Category1|2017-09-09  | null       |
  +---+----------+--------  +------------+------------+

我的问题是给出一个时间范围,例如从 2017-09-05 到 2017-09-08。首先对于 Stock1 和 Category1,我想计算与表 b 的时间重叠,即 。然后将表 A 中从 2017-09-05 到 2017-09-06 的金额相加。结果是 (100+200) = 300。如果时间范围是 2017-09-06 到 2017-09-10,则重叠是 。总和结果为 (200+200+200)=600。

我该怎么做?谢谢大家!

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    如果我理解正确,您需要在给定日期范围内每个类别的库存量。如果是这样,这是正确连接表和聚合的问题:

    select a.stock_id, b.category, sum(a.amount)
    from a join
         b
         on a.stock_id = b.stock_id and a.date >= a.add_date and 
            (a.date <= b.remove_date or b.remove_date is null)
    where a.date >= '2017-09-05' and b.date <= '2017-09-08'
    group by a.stock_id, b.category;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多