добавить столбец к запросу в обратном порядке - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть запрос

select time, a, b, c from table order by time asc

time  a  b  c
1     x  x  x
2     y  y  y
3     z  z  z

Я хочу добавить время столбца дополнительно к запросу в обратном порядке. Исходный запрос должен сохранять ту же структуру и порядок.

select time, time_reverse, a, b, c from table order by time asc

time  a  b  c  time_reverse
1     x  x  x  3
2     y  y  y  2
3     z  z  z  1

Извините, я пробовал несколько вещей и использовал Google, но не могу найти это, возможно, простое решение.

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Использование оконных функций для добавления row_number к результирующему набору и последующего присоединения этого обратно к себе может работать здесь:

WITH cte AS
(
    SELECT *, 
        ROW_NUMBER() OVER (ORDER BY `time`) as rn, 
        ROW_NUMBER() OVER ORDER BY `time` DESC) as rn2
    FROM yourtable
)
SELECT cte.time, cte.a, cte.b, cte.c, cte2.time
FROM cte INNER JOIN cte2 ON cte.rn = cte.rn2
ORDER BY cte.time;

rn и rn2 - это просто номера строк, где один обратный нумерация другого. Присоединение к этому должно дать вам результат, к которому вы стремитесь.

0 голосов
/ 02 апреля 2020

Проблема может быть решена с помощью оконной функции (начиная с MySQL 8.0). Вам необходимо объединить два запроса с различным порядком по значению row_number ():

select 
    table.*, 
    reverted.time as reverted_time
from
(
    select 
        time, a, b, c, row_number() over (order by time asc) rownum
    from table
) table
join (
    select 
        time, row_number() over (order by time desc) rownum 
    from table 
) reverted on reverted.rownum = table.rownum;

DBFiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...