Обратные значения столбца после группировки - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть следующая таблица

id    |      group  |   value
------+-------------+----------
 1    |        1    |     2
 2    |        1    |     4     
 3    |        1    |     3
 4    |        2    |     2
 5    |        2    |     9
 6    |        2    |     5

Я хочу сгруппировать строки по 'group' с порядком 'id' и создать новый столбец, который переворачивает столбец 'value' следующим образом

id    |      group  |   value |   reversedvalue
------+-------------+---------+---------
 1    |        1    |     2   |      3  
 2    |        1    |     4   |      4  
 3    |        1    |     3   |      2
 4    |        2    |     2   |      5
 5    |        2    |     9   |      9
 6    |        2    |     5   |      2

1 Ответ

0 голосов
/ 29 апреля 2019

Попробуйте следующее:

SELECT q1.id,q1.group_id,q1.value,q2.value
FROM
    (
        SELECT *,ROW_NUMBER()OVER(PARTITION BY group_id ORDER BY id) n
        FROM your_table
    ) q1
JOIN
    (
        SELECT *,ROW_NUMBER()OVER(PARTITION BY group_id ORDER BY id DESC) n
        FROM your_table
    ) q2
ON q1.group_id=q2.group_id AND q1.n=q2.n

Вы также можете использовать CTE:

WITH cte AS(
    SELECT *,
        ROW_NUMBER()OVER(PARTITION BY group_id ORDER BY id) n1,
        ROW_NUMBER()OVER(PARTITION BY group_id ORDER BY id DESC) n2
    FROM your_table
)
SELECT q1.id,q1.group_id,q1.value,q2.value
FROM
    cte q1
JOIN
    cte q2
ON q1.group_id=q2.group_id AND q1.n1=q2.n2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...