PostgreSQL - как узнать, в каком разделе я работаю, используя оконные функции? - PullRequest
0 голосов
/ 10 октября 2018

Я использую функции Windows, так как они очень полезны для моего текущего требования.row_number() очень удобно, чтобы сообщить мне строку текущего раздела.Я прочитал документацию по оконным функциям и искал в Интернете, но не могу найти ответ на то, что я хочу.Я надеюсь, что кто-то здесь может сказать, возможно ли то, что я хочу.

Мой вопрос таков: возможно ли определить, в каком разделе окна вы находитесь, аналогично тому, как row_number()говорит вам, в какой строке раздела вы находитесь?

По сути, я хочу знать что-то вроде этого, предполагая, что в окне 2 раздела, по 2 строки в каждом разделе:

partition 1 row 1
partition 1 row 2
partition 2 row 1
partition 2 row 2

Любойидеи, кто-нибудь?

1 Ответ

0 голосов
/ 10 октября 2018

Мы можем попробовать использовать DENSE_RANK и ROW_NUMBER:

WITH yourTable AS (
    SELECT 'A' AS col1, 1 AS col2 UNION ALL
    SELECT 'A', 2 UNION ALL
    SELECT 'A', 3 UNION ALL
    SELECT 'B', 1 UNION ALL
    SELECT 'B', 2 UNION ALL
    SELECT 'B', 3
)

SELECT *,
    DENSE_RANK() OVER (ORDER BY col1) partition1,
    ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2) partition2
FROM yourTable
ORDER BY
    col1, col2;

enter image description here

Демо

Общая схема для произвольного числа разделов здесь будет состоять в использовании DENSE_RANK для первых N-1 разделов, а затем ROW_NUMBER в последнем разделе.ROW_NUMBER будет гарантировать, что последний раздел имеет 1,2,3, ... как последовательность.

...