用于从连续记录中收集值的 Netezza SQL

Posted

技术标签:

【中文标题】用于从连续记录中收集值的 Netezza SQL【英文标题】:Netezza SQL for collecting values from Successive records 【发布时间】:2016-04-26 16:13:39 【问题描述】:

我在 Netezza 的 web_event 表中有一些数据,格式如下。

**vstr_id  |  sessn_id  |  event_ts | wbpg_nm** 
*V1       |  V1S1      |  02-02-2015 09:30:00 | /home/contacts*
*V1       |  V1S1      |  02-02-2015 09:20:00 | /home/login*
*V1       |  V1S1      |  02-02-2015 09:50:00 | /home/search*
*V2       |  V2S1      |  02-02-2015 09:10:00 | /home*
*V2       |  V2S2      |  02-02-2015 09:20:00 | /home/news*

这是我的源表。

我正在尝试使用该 web_event 表并创建另一个表,如下所示。

我正在努力做

Insert into page_path (select VSTR_ID,
           SESSN_ID,
           EVENT_ts,
           *?* as PREV_WBPG_NM,
           WBPG_NM,
           *?* as NXT_WBPG_NM,
           from web_event)

我希望按如下方式加载 page_path 表。

在下表中,我想根据 event_ts 列的排序顺序加载上一页和下一页列的数据。

我们如何在 Netezza 或任何 SQL 查询中做到这一点?

**vstr_id  |  sessn_id  |  event_ts | previous_wbpg_nm | wbpg_nm | next_wbpg_nm**  
*V1       |  V1S1      |  02-02-2015 09:30:00 | /home/login | /home/contacts | /home/search*
*V1       |  V1S1      |  02-02-2015 09:20:00 | null | /home/login | /home/contacts*
*V1       |  V1S1      |  02-02-2015 09:50:00 | /home/contacts | /home/search | null *
*V2       |  V2S1      |  02-02-2015 09:10:00 | null | /home/ | null*
*V2       |  V2S2      |  02-02-2015 09:20:00 | null | /home/news | null*

【问题讨论】:

【参考方案1】:

您可以在 SQL 查询中执行此操作,只需使用 lag()lead()

select vstr_id, sessn_id, event_ts,
       lag(wbpg_nm) over (partition by vstr_id, sessn_id order by event_ts) as prev_wbpg_nm,
       wbpg_nm,
       lead(wbpg_nm) over (partition by vstr_id, sessn_id order by event_ts) as next_wbpg_nm
from page_path;

【讨论】:

非常感谢您的帮助! 嗨,戈登,关于这个***.com/questions/36898926/…的任何想法@

以上是关于用于从连续记录中收集值的 Netezza SQL的主要内容,如果未能解决你的问题,请参考以下文章

Netezza - 从 SQL 语句中获取已删除记录的计数

使用 Python 从 Netezza 中的表列表中获取记录计数

用于从 Netezza 到 HDFS 的数据传输的 Sqoop 作业

无法从 Netezza 表中删除重复数据

用于从 N 记录的其他表值更新值的 SQL 查询

Netezza 使用 JOIN 删除