由网友(你生命中的一个过客、)分享简介:请帮帮忙,我有一个表,其中包含过去3年客户记录的更改历史。并且我需要输出每个客户最后一天的状态或记录。表格如下:表A:| ID | Name | Number|from_date(in Timestamp)|to_date(in Timestamp)||:--- |:----:|:-----:|------...![Excel如何提取客户第一次与最后一次出现的记录 字典1秒搞定](https://p.xsw88.cn/allimgs/daicuo/20230904/6388.png)
请帮帮忙,我有一个表,其中包含过去3年客户记录的更改历史。 并且我需要输出每个客户最后一天的状态或记录。
表格如下:
![Excel如何提取客户第一次与最后一次出现的记录 字典1秒搞定](https://p.xsw88.cn/allimgs/daicuo/20230904/6388.png)
表A:
| ID | Name | Number|from_date(in Timestamp)|to_date(in Timestamp)|
|:--- |:----:|:-----:|----------------------:|--------------------:|
|123 | John | 101 |20210101 01:11:15 |20210103 01:11:15 |
|123 | John | 102 |20210103 01:11:15 |20210301 01:11:15 |
|123 | John | 103 |20210301 01:11:15 |20210325 01:11:15 |
|123 | John | 104 |20210325 01:11:15 |20210415 01:11:15 |
|123 | John | 105 |20210415 01:11:15 |20210416 01:11:15 |
|123 | John | 106 |20210416 01:11:15 |20210525 01:11:15 |
|123 | John | 104 |20210525 01:11:15 |20210915 01:11:15 |
|123 | John | 105 |20210915 01:11:15 |null |
根据上述数据,遗憾的是,没有2月、6月、7月、8月和9月的记录
但我需要显示每个月(1月至12月)的客户数据。
预期输出应如下所示:
| ID | Name | Number|Date |
|123 | John | 102 |20210131|
|123 | John | 102 |20210228|
|123 | John | 104 |20210331|
|123 | John | 106 |20210430|
|123 | John | 104 |20210531|
|123 | John | 104 |20210630|
|123 | John | 104 |20210731|
|123 | John | 104 |20210831|
|123 | John | 104 |20210931|
我可以通过下面的SQL获取from_date
列中可见的所有月份的最后一天记录。
但对于未列出的月份或介于from_date
和to_date
列之间的月份,我很难显示出来。
select a.id, a.name, a.number, last_day(a.from_date) Date
from (select a.*, row_number() over (partition by a.id, trunc(from_date, 'MON')
order by from_date desc) as seqnum from tableA a
) a where seqnum = 1;
供您参考,上面的SQL输出如下:
| ID | Name | Number|Date |
|123 | John | 102 |20210131|
|123 | John | 104 |20210331|
|123 | John | 106 |20210430|
|123 | John | 106 |20210531|
|123 | John | 106 |20210931|
Teradata
您可以使用推荐答案的EXPAND ON子句。为此,我们从from_date
和to_date
创建一个PERIOD
数据类型,然后使用EXPAND ON
将该时段分为MONTH_END
块。
如下所示:
SELECT yourtable.*, BEGIN(bg)
FROM yourtable
EXPAND ON PERIOD(from_date, NEXT(to_date)) AS by BY ANCHOR MONTH_END;
可能不得不稍微修改一下语法,但这应该会让您大致了解情况。
相关推荐
最新文章