在数据集中连接2个日期字段

时间:2017-12-14 23:34:37

标签: mysql sql postgresql

我目前在使用2个日期字段时遇到问题,这两个日期字段驱动了我刚刚加入的2个不同的报告。一个叫做Month_start_dt,另一个叫做Tran_dt。 Month_start_dt正在推动收入报告,Tran_dt正在推动绩效报告。我已将2个查询暂存到新表中,但是2日期与同一个customer_id不匹配。我想看看如何将2日期结合起来,以便在Tableau报告中,我可以使用一个日期过滤器来获取性能和收入信息。

由于

目前数据如下:

customer_id/month_start_dt/Tran_dt

11111 / 12-1-2017 / 4-20-2017

22222 / 11-1-2017 / 12-3-2017

33333 / 9-1-2016 / 4-6-2017

44444 / 2-1-2017 / 5-3-2016

希望结果看起来像这样:

customer_id / month_start_dt

11111 / 12-1-2017

11111 / 4-20-2017

22222 / 11-1-2017

22222 / 12-3-2017

33333 / 9-1-2016

33333 / 4-6-2017

44444 / 2-1-2017

44444 / 5/3/2016

1 个答案:

答案 0 :(得分:0)

您可以使用cross join乘以任何表的行,并且可以使用简单返回2行的子查询。 e.g:

select
    customer_id
  , case when rn = 1 then month_start_dt else Tran_dt end month_start_dt
  , case when rn = 1 then 'month_start_dt' else 'Tran_dt' end dt_type
from table1
cross join (select 1 as rn union all select 2) cj

会产生:

| customer_id |       month_start_dt |        dt_type |
|-------------|----------------------|----------------|
|       11111 | 2017-12-01T00:00:00Z | month_start_dt |
|       11111 | 2017-04-20T00:00:00Z |        Tran_dt |
|       22222 | 2017-11-01T00:00:00Z | month_start_dt |
|       22222 | 2017-12-03T00:00:00Z |        Tran_dt |
|       33333 | 2016-09-01T00:00:00Z | month_start_dt |
|       33333 | 2017-04-06T00:00:00Z |        Tran_dt |
|       44444 | 2017-02-01T00:00:00Z | month_start_dt |
|       44444 | 2016-05-03T00:00:00Z |        Tran_dt |

注意,上面的查询适用于MySQL和Postgres,但如果我们确切地知道要定位的数据库类型,它确实很有帮助。请仅使用正确的数据库标记