将 start_date 和 _end_date 加入另一个表并总结

Posted

技术标签:

【中文标题】将 start_date 和 _end_date 加入另一个表并总结【英文标题】:join start_date and _end_date to another table and sum up 【发布时间】:2019-01-19 14:51:44 【问题描述】:

表1的表列是​​:

cancel_date    product  total_cancels
6/1/2017       a        100
6/1/2017       b        40
6/2/2017       b        10
6/3/2017       b        20
.
.
.
6/1/2018       a        40
6/1/2018       b        10

表 2

realdate  cancel_start_date    cancel_end_date
6/1/2017    6/1/2016           4/1/2017
6/2/2017    6/2/2016           4/2/2017
6/3/2017    6/3/2016           4/3/2017
.
.
.

所以 table1.cancel_date 在 t2.cancel_start_date 和 t2.cancel_end_date 之间, 如何加入这两个表?

我想得到什么

product    realdate      total_cancels   cancel_date between start_date and end_date
a          6/1/2017       100000         6/1/2016-4/30/2017 
b          6/1/2017       8000           6/1/2016-4/30/2017
a          6/2/2017       100000         6/2/2016-5/1/2017
b          6/2/2017       8000           6/2/2016-5/1/2017
...

【问题讨论】:

您需要从表 1 中选择 Product,cancel_date。然后从表 2 中选择 realdate,cancel_date。找到 Sum 或 Total_cancel。然后将它们全部附加到一个输出表中。可以同时访问两个不同表中的行或列。 请阅读 How to Ask 并点击谷歌搜索“stackexchange 作业”并展示您能够完成的部分。请阅读minimal reproducible example并采取行动。 【参考方案1】:

您要做的是将table_2 连接到table_1,使用诸如table_1 的on 条件。 cancel_date 介于 table_2.cancel_start_date 和 table_2.cancel_end_date 之间。但首先我们需要使用 DATE_PARSE 函数来使日期具有可比性。最后总结一下价值。

SELECT
  table_1.product,
  table_2.realdate,     
  SUM(total_cancels) AS total_cancels,   
  CONCAT(table_2.cancel_start_date, '-', table_2.cancel_end_date) as start_to_end
FROM table_1 
JOIN table_2
WHERE DATE_PARSE(table_1. cancel_date, '%m/%d/%Y') 
  BETWEEN DATE_PARSE(table_2.cancel_start_date, '%m/%d/%Y') 
   AND DATE_PARSE(table_2.cancel_end_date, '%m/%d/%Y') 
GROUP BY 1, 2, 4 

【讨论】:

以上是关于将 start_date 和 _end_date 加入另一个表并总结的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 8 从 url 中获取动态 start_date 和 end_date(日期范围)?

SQL如何从2个单独的列start_date和end_date中获得月度趋势?

Laravel 5.3 验证:由两列(start_date,end_date)设置的唯一周期时间

如何在 django 中向 Case、When 条件添加排序

将其基于重复记录的两列组合组合在一起创建记录,并分配 Min start_date 和 Max end_date

excel 日期格式为 "yyyymmdd hhmm" 如何计算两个时间的差?