Фильтр Netezza LAST_VALUE - PullRequest
       6

Фильтр Netezza LAST_VALUE

0 голосов
/ 21 октября 2011

Я пытаюсь создать таблицу 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)

Ответы [ 3 ]

0 голосов
/ 21 ноября 2011

Следующий запрос должен нормально работать.

CREATE TABLE TIMESTAMP_DATA_LATEST КАК ВЫБЕРИТЕ Col1, Col2, MAX (Timestamp_val) AS Latest_TimeStamp FROM TIMESTAMP_DATA GROUP BY Col1, Col2;

С уважением, Venk

0 голосов
/ 03 апреля 2016

если вы пытаетесь реализовать SCD2 .. я имею в виду вставку только новой записи в целевую таблицу из исходной таблицы, тогда вы можете выполнить левое внешнее соединение и вставить данные в целевую таблицу.поправьте меня, если ваше требование отличается

0 голосов
/ 24 октября 2011

Понял - наконец-то!rowid был неправильным. Кредит Шону Фоксу из Netezza Community за вдохновение.

  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)
...