Teradata 通过一个查询输出3个聚合列
我想计算3个列的工作日,每个列各有一个。 例如: 记录输入日期将计算记录创建日期和输入日期之间的工作日。 记录扫描日期将在记录创建日期和扫描日期之间计算 记录创建日期和INDX日期之间的INDX总线日。 我有一张日历表,上面有工作日指示器BUS_DT_IND='Y'和'N' 我希望一次输出所有三个端口 任何人都可以帮我解决这个问题Teradata 通过一个查询输出3个聚合列,teradata,Teradata,我想计算3个列的工作日,每个列各有一个。 例如: 记录输入日期将计算记录创建日期和输入日期之间的工作日。 记录扫描日期将在记录创建日期和扫描日期之间计算 记录创建日期和INDX日期之间的INDX总线日。 我有一张日历表,上面有工作日指示器BUS_DT_IND='Y'和'N' 我希望一次输出所有三个端口 任何人都可以帮我解决这个问题 Select A.REC_ENTR_B_DY , B.REC_SCAN_B_DY , C.INDX_B_DY from (select EN
Select A.REC_ENTR_B_DY
, B.REC_SCAN_B_DY
, C.INDX_B_DY
from (select ENTR_DT
, REC_CREATED_DT
, SUM(WHEN BUS_DT_IND='Y' then 1 else 0) as REC_ENTR_B_DY
from RECORD
join calendar
on calendar.Calendar_date between ENTR_DT and REC_CREATED_DT
group by 1,2) A
LEFT JOIN (select SCAN_DT
, REC_CREATED_DT
, SUM(WHEN BUS_DT_IND='Y' then 1 else 0) as REC_SCAN_B_DY
from RECORD
join calendar on calendar.Calendar_date between SCAN_DT and REC_CREATED_DT
group by 1,2) B
on A.REC_CREATED_DT=B.REC_CREATED_DT
LEFT JOIN (select INDX_DT
, REC_CREATED_DT
, SUM(WHEN BUS_DT_IND='Y' then 1 else 0) as REC_SCAN_B_DY
from RECORD
join calendar
on calendar.Calendar_date between INDX_DT and REC_CREATED_DT
group by 1,2)C
on A.REC_CREATED_DT=C.REC_CREATED_DT
您是否有任何示例SQL没有产生预期的结果?我是通过自连接完成的。选择A.REC_ENTR_B_DY,B.REC_SCAN_DY,C.INDX_B_DY从Select ENTR_DT,REC_CREATED_DT,SUMWHEN BUS_DT_IND='Y'中选择A.REC_ENTR_DY,B.REC_SCAN_DY,C.INDX_DY,然后从日历上的记录连接日历中选择1.0作为记录连接日历。日历日期介于ENTR_DT和REC CREATED_DT组之间,由1,2A左外连接选择扫描,REC_CREATED_DT,SUMWHEN BUS_DT_IND='Y'然后1 else 0 as REC_SCAN_DY from RECORD join calendar on calendar.calendar_SCAN_DT和REC_CREATED_DT group之间的日期在A.REC_CREATED_DT=B.REC_CREATED_DT左外连接选择INDX_DT,REC CREATED_DT,SUMWHEN BUS_DT_IND='Y'然后1 else 0 as REC_SCAN_DY from RECORD join calendar on calendar.calendar_INDX_DT和REC_CREATED_DT group之间的日期在A.REC_CREATED_DT=C.REC_CREATED_DT上为1,2C此查询需要时间。因为我们有大约3000万条记录,这导致了巨大的中间结果,从开始到结束的平均天数是多少?然后加入一个非唯一列。。。