如何将单个日期列加入时间范围表

Posted

技术标签:

【中文标题】如何将单个日期列加入时间范围表【英文标题】:how to join a single date column to a time rage table 【发布时间】:2019-01-19 13:25:18 【问题描述】:

表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
6/1/2017
6/2/2017
6/3/2017
.
.
.
6/1/2018

我想得到什么

product    realdate      total_cancels   cancel_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
...

所以基本上按 realdate 对 total_cancels 求和,对于每个 realdate,我需要将 canceldate 分组为 2-12 个月。

【问题讨论】:

样本数据和期望的结果——以表格的形式——真的很有帮助。 【参考方案1】:

使用聚合函数sum 。但奇怪的是,您显示输出的方式取消了日期列。我认为这是您的打字错误

    select t1.product, t2.realdate, sum(t1.total_cancels) as total_cancels   
    from Table1 t1 inner join Table2 t2 on date(t1.cancel_date)=date(t2.realdate)
    group by t1.product, t2.realdate 

【讨论】:

【参考方案2】:

尚未对此进行测试,但可能会有所帮助?

select t1.product, t2.realdate, sum(t1.total_cancels) 
from t1 join t2 on t1.cancel_date=t2.realdate
group by t1.product, t2.realdate 

我不确定我是否理解您在最后一栏中想要的内容。这只是根据producttotal_cancelsrealdate 分组。

【讨论】:

【参考方案3】:

似乎这个问题与我在这里回答的问题相同: join start_date and _end_date to another table and sum up

您要做的是将 table_2 连接到 table_1,使用条件,例如 table_1。 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 

【讨论】:

谢谢,但是如果你加入表1和表2,我需要加入主键吗?

以上是关于如何将单个日期列加入时间范围表的主要内容,如果未能解决你的问题,请参考以下文章

我如何查询给定日期范围的mysql并加入两个表?

如何在 Hive SQL 中按日期范围独家加入?

Oracle SQL 多列与单个范围/图例对齐

年份列与日期范围列的查询性能如何

SQL 加入日期范围

日期时间范围之间的 Python Pandas 累积列