0

我正在尝试创建一个仅包含特定键的最新记录的 NETEZZA 表 - 例如,想象一个表(MYTABLE)如下:

Col1 Col2 TIMESTAMP
xxxx xxxx 13:45
xxxx xxxx 13:46
xxxx yyyy 10:00

我想返回一个表格如下:

Col1 Col2 TIMESTAMP
xxxx xxxx 13:46
xxxx yyyy 10:00

我猜我需要一些代码:

  Create table MYNEWTABLE as
    select *
    from MYTABLE
    WHERE rowid in
    (
    SELECT LAST_VALUE(rowid)
    OVER (PARTITION BY COL1, COL2
          ORDER BY TIMESTAMP)
          FROM MYTABLE
    )
    ORDER BY COL1,COL2
    distribute on (COL1)

但是这并没有真正起作用,有人可以建议吗?(具体如何通过 col1 / col2 分区中时间戳的最后一个值过滤表)

4

3 回答 3

0

下面的查询应该可以正常工作。

CREATE TABLE TIMESTAMP_DATA_LATEST AS SELECT Col1,Col2,MAX(Timestamp_val) AS Latest_TimeStamp FROM TIMESTAMP_DATA GROUP BY Col1,Col2;

问候,文克

于 2011-11-21T15:35:03.190 回答
0

明白了——终于!rowid 是用词不当。 感谢Netezza社区的 Shawn Fox 提供的灵感。

  Create table MYNEWTABLE as select * from
    (select *
            ,row_number() over (
                 partition by COL1, COL2 order by TIMESTAMP desc
                               ) row
       from MYTABLE 
    ) x
    WHERE x.row=1
    distribute on (COL1)
于 2011-10-24T10:50:17.627 回答
0

如果您正在尝试实现 SCD2 .. 我的意思是仅从源表向目标表插入新记录,那么您可以进行左外连接并将数据插入目标。如果您的要求不同,请纠正我

于 2016-04-03T14:19:21.800 回答