Использование «строк между 1 подпиской и 1 подпиской в ​​Teradata» для выбора значений следующей строки - PullRequest
2 голосов
/ 04 октября 2019

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

Используемый SQL-запрос выглядит следующим образом:

SELECT DISTINCT
  "Title",
  "US Release Date Title",
  MAX("Title") OVER (
    PARTITION BY "Brand"
    ORDER BY "US Release Date Title" DESC, "Title" DESC
    ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING
) AS "Predecessor"

И фрагментом этого запроса является следующий вывод:

Call of Duty: Black Ops IIII    |  2018-10-12  |  Call of Duty: Black Ops IIII    |  2018-10-12
Call of Duty: Black Ops IIII    |  2018-10-12  |  Call of Duty: WWII              |  2017-11-03
Call of Duty: WWII              |  2017-11-03  |  Call of Duty: Infinite Warfare  |  2016-11-04
Call of Duty: WWII              |  2017-11-03  |  Call of Duty: WWII              |  2017-11-03
Call of Duty: Infinite Warfare  |  2016-11-04  |  Call of Duty: Advanced Warfare  |  2014-11-03
Call of Duty: Infinite Warfare  |  2016-11-04  |  Call of Duty: Infinite Warfare  |  2016-11-04
Call of Duty: Advanced Warfare  |  2014-11-03  |  null                            |  null
Call of Duty: Advanced Warfare  |  2014-11-03  |  Call of Duty: Advanced Warfare  |  2014-11-03

Мой желаемый вывод такой: И фрагмент вывода этого запроса такой:

Call of Duty: Black Ops IIII    |  2018-10-12  |  Call of Duty: WWII              |  2017-11-03
Call of Duty: WWII              |  2017-11-03  |  Call of Duty: Infinite Warfare  |  2016-11-04
Call of Duty: Infinite Warfare  |  2016-11-04  |  Call of Duty: Advanced Warfare  |  2014-11-03
Call of Duty: Advanced Warfare  |  2014-11-03  |  null                            |  null

1 Ответ

1 голос
/ 04 октября 2019

Я думаю, вам нужно select distinct перед оконной функцией. Или используйте агрегацию:

SELECT "Title", "US Release Date Title",
       MAX("Title") OVER (PARTITION BY MAX("Brand")
                          ORDER BY "US Release Date Title" DESC,
                                   "Title" DESC
                          ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING
                          ) AS "Predecessor"
FROM t
GROUP BY "Title", "US Release Date Title";

Вам нужна функция агрегирования около Brand, чтобы это работало.

...