#sql #oracle
#sql #Oracle
Вопрос:
Я пытаюсь найти разницу между каждым столбцом (датой) по дилеру.
Моя таблица содержит дилеров, месяцы и значения для каждого месяца. Я пытаюсь найти разницу между месяцами (предыдущий- следующий). Я пробовал некоторые запросы с задержкой, но я не получаю правильных результатов.
SELECT A.FCLTY_NO, A.CSR_MN, A.CP1KVINS,
LEAD(A.CP1KVINS, 1, 0) OVER (ORDER BY A.CP1KVINS) AS NEXT_CPIKVIN,
LEAD(A.CP1KVINS, 1, 0) OVER (ORDER BY A.CP1KVINS) - A.CP1KVINS AS
DIFF_CP1KVIN
FROM USER9.WPO_VIN_VST_CLM_CY17_TO_DATE A,
DRBA.ADA_DEALER_T E
WHERE A.FCLTY_NO = E.DEALER_NO
AND E.CHANNEL_ELIG_CD = 'N'
AND E.APPOINT_DT < '01JAN2018'
AND E.TERM_DT = '31DEC9999'
ORDER BY A.FCLTY_NO, A.CSR_MN
FCLTY_NO CSR_MN CP1KVINS CP1KVINS_DIFF
01016 1/01/2017 1,060 0
01016 2/01/2017 1,000 -60
01016 3/01/2017 1,070 70
01016 4/01/2017 1,070 0
01016 5/01/2017 1,060 -10
01016 6/01/2017 1,070 10
01016 7/01/2017 1,060 -10
01016 8/01/2017 1,050 -10
01016 9/01/2017 1,060 10
01016 10/01/2017 1,040 -20
Комментарии:
1. Пожалуйста, отредактируйте свой вопрос и предоставьте данные для каждой таблицы, которые должны привести к показанному вами результату. Спасибо.
Ответ №1:
Лидам может понадобиться PARTITION BY
на объекте.
И это ORDER BY
должно быть в поле даты.
Кроме того, лучше начать использовать JOIN
синтаксис.
Старый синтаксис запятой устарел еще в предыдущем столетии.
SELECT fac.FCLTY_NO, fac.CSR_MN, fac.CP1KVINS,
LEAD(fac.CP1KVINS, 1, 0) OVER (PARTITION BY fac.FCLTY_NO ORDER BY fac.CSR_MN) AS NEXT_CPIKVIN,
LEAD(fac.CP1KVINS, 1, 0) OVER (PARTITION BY fac.FCLTY_NO ORDER BY fac.CSR_MN) - fac.CP1KVINS AS DIFF_CP1KVIN
FROM USER9.WPO_VIN_VST_CLM_CY17_TO_DATE fac
JOIN DRBA.ADA_DEALER_T dealer
ON dealer.DEALER_NO = fac.FCLTY_NO
WHERE dealer.CHANNEL_ELIG_CD = 'N'
AND dealer.APPOINT_DT < '01JAN2018'
AND dealer.TERM_DT = '31DEC9999'
ORDER BY fac.FCLTY_NO, fac.CSR_MN;
Результат:
FCLTY_NO CSR_MN CP1KVINS NEXT_CPIKVIN DIFF_CP1KVIN
01016 01/01/2017 1060 1000 -60
01016 01/02/2017 1000 1070 70
01016 01/03/2017 1070 1070 0
01016 01/04/2017 1070 1060 -10
01016 01/05/2017 1060 1070 10
01016 01/06/2017 1070 1060 -10
01016 01/07/2017 1060 1050 -10
01016 01/08/2017 1050 1060 10
01016 01/09/2017 1060 1040 -20
01016 01/10/2017 1040 0 -1040
Комментарии:
1. @casaler кажется, это помогло, пожалуйста, попробуйте принять ответ тогда.