Как получить сравнение значений столбца в sql? - PullRequest
0 голосов
/ 27 сентября 2019

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

Product   Year    1Jan     2Jan .................... 31Dec
A         2018    10       20   .................... 120
A         2019    130      150  .................... 200 
B         2018    15       23   .................... 90
B         2019    113      130  .................... 220

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

• Для 2018 года,отрицая значение 2 января с 1 января (2 января - 1 января), мы получаем новое значение 2 января.

• Для 2018 года, отрицая значение 3 января с 2 января (3 января -2 января), мы получаем новое значение 3 января.

• Для 2018 года, отрицая значение 31Dec от 30 декабря (31 декабря - 30 декабря), мы получаем новое значение 31 декабря

• Теперь, для 2019 года, отрицая значение 31 декабря (2018 года) с 1 января (2019 года), мы получаем новое значение 1 января 2019 года

Итак, вКороче говоря, значение столбца - это разница его значения со значением предыдущего дня.

Product   Year    1Jan     2Jan .................... 31Dec
A         2018    10       10   .................... 15       (just assume value of 30Dec column is 105)
A         2019    10       20   .................... 10       (just assume value of 30Dec column is 190)
B         2018    15       8    .................... 8        (just assume value of 30Dec column is 82)
B         2019    23       17   .................... 10       (just assume value of 30Dec column is 210)

Дайте мне знать, если что-то не понятно.

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Хотя логически в этом запросе ничего нет, но все же вам придется потрудиться, чтобы написать его -

SELECT Product
      ,Year
      ,1Jan
      ,2Jan - 1Jan 2Jan
      ,3Jan - 2Jan 3Jan
      .
      .
      .
      ,31Dec - 30Dec 31Dec
FROM YOUR_TAB
ORDER BY Product
        ,Year;
0 голосов
/ 28 сентября 2019

Прежде всего, я думаю, что дизайн стола мог бы быть лучше, но это тема для другого времени.Прямо сейчас код должен работать -

SELECT Product, Year,  
       1Jan      AS '1st Jan',  
       2Jan-1Jan AS '2nd Jan',  
       3Jan-2Jan AS '3rd Jan',  
       4Jan-3Jan AS '4th Jan',  
       .  
       .  
       .  
       .   
       .  
       31Dec-30Dec AS '31st Dec',

FROM [table name];
0 голосов
/ 27 сентября 2019

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

CREATE TABLE price_history (
    product VARCHAR(100) NOT NULL,
    date DATE NOT NULL,
    price DECIMAL(18, 2) NOT NULL,
    PRIMARY KEY (product, date)
)

И запросить данные примерно так:

SELECT product
     , date 
     , price
     , price - LAG(price) OVER (PARTITION BY product ORDER BY date) AS diff
FROM price_history
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...