Как получить разные данные из одной таблицы с месяцами в качестве параметров? - PullRequest
0 голосов
/ 24 ноября 2018

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

Мне нужно пропустить последний месяц как параметр и получить данные

Пример:

+---------+-------+------------+
| article | price | date       |
+---------+-------+------------+
| cup     | 3.5   | 02/06/2018 |
+---------+-------+------------+
| cup     | 3.7   | 04/07/2018 | 
+---------+-------+------------+
| cup     | 3.8   | 04/08/2018 | 
+---------+-------+------------+

Ожидается:

Выбранный месяц: 07

+---------+--------------+-------------+----------+----------+
| article | current_price|current_month|last_price|last_mont |
+---------+--------------+-------------+----------+----------+
| cup     |      3.7     |  07/2018    | 3.5      |  06/2018 |
+---------+--------------+-------------+----------+----------+

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Если пользователь указывает дату , то следующие две даты и цены получают в течение этой даты:

select article_id,
       max(case when seqnum = 1 then price end) as current_price,
       max(case when seqnum = 1 then date end) as current_date,
       max(case when seqnum = 2 then price end) as last_price,
       max(case when seqnum = 2 then price end) as last_date
from (select e.*,
             row_number() over (partition by article_id order by date desc) as seqnum
      from examples e
      where e.date <= :date
     ) e
group by article_id;
0 голосов
/ 24 ноября 2018

Вы можете использовать следующий оператор SQL:

select article, 
       max(decode(to_char("date",'mm/yyyy'),to_char(sysdate,'mm/yyyy'),nvl(price,0)))
       as current_price,
       to_char(sysdate,'mm/yyyy') as current_month,
       max(decode(to_char("date",'mm/yyyy'),to_char(add_months(sysdate,-1),'mm/yyyy'),
                                                                nvl(price,0)))
       as last_price,
       to_char(add_months(sysdate,-1),'mm/yyyy') as last_month
  from articles 
 where article = 'cup'
group by article;

ARTICLE CURRENT_PRICE   CURRENT_MONTH   LAST_PRICE  LAST_MONTH
  cup       3,70           07/2018         3,50       06/2018

при условии, что sysdate (текущая дата) находится между 01/07/2018 - 31/07/2018 (формат dd/mm/yyyy)

Rextester Demo

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