Фильтр Netezza LAST_VALUE

#sql #database-partitioning #netezza

#sql #разделение базы данных #netezza

Вопрос:

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

Ответ №1:

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

   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)
 

Ответ №2:

Приведенный ниже запрос должен работать нормально.

СОЗДАЙТЕ ТАБЛИЦУ TIMESTAMP_DATA_LATEST КАК ВЫБЕРИТЕ Col1,Col2,MAX(Timestamp_val) КАК Latest_TimeStamp ИЗ TIMESTAMP_DATA GROUP ПО Col1,Col2;

С уважением, Венк

Комментарии:

1. хммм — не думаю, что так, возможно, мой вопрос был неясен (следовало добавить несколько фиктивных записей). Я хочу создать таблицу, содержащую только самые ПОСЛЕДНИЕ ЗАПИСИ для определенного ключа.. (В примере я показал только ключ и временную метку).

Ответ №3:

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