Как выбрать конкретные изменения с помощью оконных функций в postgres - PullRequest
3 голосов
/ 22 сентября 2010

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

from | to | timestamp
   1 |  2 | 0000
   1 |  2 | 0001
   1 |  2 | 0002
   1 |  3 | 0003
   1 |  3 | 0004
   1 |  2 | 0005

SELECT from, to, FIRST (временная метка) FROM таблицы GROUP BY from, to;

from | to | timestamp
   1 |  2 | 0000
   1 |  3 | 0003

Я могу сделать Группу By, чтобы получить первые два перехода, но он группирует третий с первым, и я не могу видеть его, когда он возвращается.

Iхотел бы сделать запрос, который получает следующее:

from | to | timestamp
   1 |  2 | 0000
   1 |  3 | 0003
   1 |  2 | 0005

Возможно ли это?

1 Ответ

5 голосов
/ 22 сентября 2010

В PostgreSQL 8.4 вы можете использовать оконную функцию LAG , чтобы получить доступ к предыдущей строке и сравнить ее, чтобы увидеть, имеет ли она одинаковые значения "from" и "to":

SELECT "from", "to", timestamp
FROM
(
    SELECT
        "from",
        "to",
        timestamp,
        LAG(("from", "to")) OVER (ORDER BY timestamp) AS prev
    FROM Table1
) T1
WHERE ("from", "to") IS DISTINCT FROM prev

Результат:

from  to    timestamp
1     2     0000        
1     3     0003        
1     2     0005    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...