在加入SQL Netezza时使用窗口聚合功能

问题描述

请使用以下SQL代码,我需要将 TTS 表与 CMS 表联接,其中CMS.NEW_COLLECTED_DIGITS = TTS.FULLNUM,并且我还需要联接TTS.LAST_UDATE_DATE with CMS.Call_Date,但是挑战是我需要获取TTS.LAST_UDATE_DATE between CMS.Call_Date AND CMS.Call_Date + '01:00:00'::"INTERVAL",并且LAST_UDATE_DATE在CMS中有很多记录。Call_Date周期间隔,我只需要获取最大值,

以下查询给了我这个错误: expression_tree_walker:意外的节点类型801

像下面的示例

|FullNum    |LAST_UDATE_DATE    |Call_Date        |
|123456     |6/4/2020 18:10:11  |6/4/2020 18:00:11|
|123456     |6/4/2020 18:13:11  |6/4/2020 18:00:11|
|123456     |6/4/2020 18:14:11  |6/4/2020 18:00:11|
|123456     |6/4/2020 18:20:11  |6/4/2020 18:00:11|
|123456     |6/4/2020 18:30:11  |6/4/2020 18:00:11|
|123456     |6/4/2020 18:40:11  |6/4/2020 18:00:11|
|123456     |6/4/2020 18:50:11  |6/4/2020 18:00:11|

结果将是:

|FullNum    |LAST_UDATE_DATE    |Call_Date        |
|123456     |6/4/2020 18:50:11  |6/4/2020 18:00:11|

代码是

-- Step 1: 
-- Get Call Date From IVR with CMS.CALL_HEADER
 WITH CMS AS (
SELECT CALL_DATE,New_COLLECTED_DIGITS
FROM CMS),-- Step 2
--Gett All TTS Logs Table
 TTS AS (
SELECT ITEM_ID,FullNum,LAST_UDATE_DATE
FROM TTS)
-- Join CMS with TTS while ADSL_Phone_Num is matched and ticket log date is between call date and call date plus one hour
 SELECT *
FROM CMS
LEFT JOIN TTS ON
    CMS.NEW_COLLECTED_DIGITS = TTS.FULLNUM
    AND (FIRST_Value (TTS.LAST_UDATE_DATE) OVER (PARTITION BY TTS.ITEM_ID ORDER BY TTS.LAST_UDATE_DATE DESC )
    BETWEEN CMS.Call_Date AND CMS.Call_Date + '01:00:00'::"INTERVAL")

解决方法

嗯。 。 。从描述问题的方式来看,您可以先使用join然后使用row_number()为每个cms呼叫记录选择最新记录:

select ct.*
from (select . . .,-- list the columns you want here,row_number() over (partition by cms.new_collect_digits,cms.call_date order by tts.last_update_date desc) as seqnum
      from cms left join
           tts
           on cms.new_collect_digits = tts.fullnum and
              tts.last_update_date between cms.call_date and cms.call_date + '01:00:00'::"INTERVAL"
     ) ct
where seqnum = 1;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...