在加入 SQL Netezza 时使用窗口聚合函数
Posted
技术标签:
【中文标题】在加入 SQL Netezza 时使用窗口聚合函数【英文标题】:Use window aggregation functions with joining SQL Netezza 【发布时间】:2020-10-25 10:05:36 【问题描述】:请使用下面的 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 周期间隔中有很多记录,我只需要获取 Max 一个,
下面的查询给了我这个错误:expression_tree_walker: Unexpected node type 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")
【问题讨论】:
【参考方案1】:嗯。 . .从您描述问题的方式来看,您可以使用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;
【讨论】:
它给了我这个错误:发现“ROW_NUMBER”(在字符 1784 处)期待 `')'' 我可以在哪里添加这些括号 @AhmedMohammedAbdelKader 。 . .行号在语法上是正确的。您是否按照评论所说的那样将. . .
替换为您想要的列。
是的,我已经添加了其他列的列表以上是关于在加入 SQL Netezza 时使用窗口聚合函数的主要内容,如果未能解决你的问题,请参考以下文章
我是 DMBS 系统的新手,是不是可以加入两个数据库系统,如 SQL 和 Netezza?