问题描述
我对记录超过50MM的数据集提出了数据请求,以根据日期和时间戳添加一些数据字段
Dataset that I have
ID CODE ISSUEDATE ISSUETIME ORDERDATE ORDERTIME QTY
101 A51 2020-08-24 11:24:00 2020-08-21 09:25:00 100
101 777 2020-08-21 08:30:00 2020-08-21 08:30:00 125
101 888 2020-08-21 09:30:00 2020-08-21 09:30:00 145
102 A51 2020-08-23 11:24:00 2020-08-21 09:25:00 100
102 256 2020-08-20 08:30:00 2020-08-20 08:30:00 125
102 256 2020-08-20 11:24:00 2020-08-20 11:24:00 145
我需要提取CODE ='A51'的数据
I want the following Dataset
ID CODE ISSUEDATE ISSUETIME ORDERDATE QTY ISSUEDATE2 ISSUUTIME2 QTY2
101 A51 2020-08-24 11:24:00 2020-08-21 100 2020-08-21 08:30:00 125
102 A51 2020-08-23 11:24:00 2020-08-21 100 2020-08-20 08:30:00 125
-
我需要基于每个ID的代码值“ A51”的ORDERDATE和ISSUETIME创建ORDERDATE2,ISSUETIME2和QTY2变量。
-
ORDERDATE2和ORDERTIME2将查找ORDERDATE和ORDERTIME,并从非“ A51”行中提取最接近的ISSUEDATE,ISSUETIME和QTY详细信息
在上面的示例中-ID 101的ORDERDATE为'2020-08-21',ORDERTIME为09:25-因此,此ID在2020-08-21上的最新非'A51'记录为08:30:00数量为125
- 如果没有ORDERDATE的条目,则应捕获到ISSUEDATE的最新条目 在上面的示例中-ID 102的ORDERDATE为'2020-08-21',但是'2020-08-21'没有ISSUEDATE行,因此最接近该日期的是('2020-08-20',08:30 :00和125)捕获。
我是Teradata Qualify
语句的新手,我所做的就是为A51(而不是A51)创建单独的数据集,并按ID和时间将它们合并在一起
Create table _A51_ as Select ID,ISSUEDATE,ISSUETIME,ORDERDATE,ORDERTIME,QTY from
Have where CODE='A51'
Create table _Non_A51_ as Select ID,QTY from
Have where CODE ne 'A51'
Create table _A51B_ as Select
A.*,B.ISSUEDATE as ISSUEDATE2,B.ISSUETIME as ISSUETIME2
from _A51_ as A
inner join _Non_A51_ as B
where A.ID=B.ID and
A.ORDERDATE=B.ISSUEDATE
and A.ORDERTIME le B.ISSUETIME
QUALIFY ROW_NUMBER() OVER (PARTITION BY A.ID,A.ISSUEDATE ORDER BY B.ISSUETIME)=1
这不会给我ID 102的行-我希望没有我创建两个数据集并将它们联接起来的方法应该很简单。
非常感谢您的帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)