Как я могу показать результат последней записи в каждой строке в оракуле SQL - PullRequest
0 голосов
/ 01 марта 2019

У меня есть ситуация, в которой я должен показать результат последней записи в каждой строке в Oracle SQL

Пример: -

**brand**  **result**  **year_month**
  nike         200        2018-01
  nike         200        2018-02
  nike         200        2018-03
  nike         300        2018-04

, который я повторно набрал:

**brand**  **result**  **year_month**
  nike         300        2018-01
  nike         300        2018-02
  nike         300        2018-03
  nike         300        2018-04

На основании прошлогодней записи я должен ежемесячно распространять этот вопрос, с которым я столкнулся в БОЛЬШОМ интервью MNC

Ответы [ 3 ]

0 голосов
/ 01 марта 2019
SELECT brand, Max(result) OVER(PARTITION BY brand), year_month
FROM brand;

Вопрос неясен.Это то, что вы ищете?

0 голосов
/ 01 марта 2019

Как-то так?

  • partition гарантирует, что каждый бренд получает свой собственный результат
  • order by говорит ему получить result значение, которое принадлежит последнемуyear_month

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


SQL> with test (brand, result, year_month) as
  2    (select 'nike', 200, '2018-01' from dual union all
  3     select 'nike', 200, '2018-02' from dual union all
  4     select 'nike', 200, '2018-03' from dual union all
  5     select 'nike', 50 , '2018-04' from dual
  6    )
  7  select brand,
  8         first_value (result) over (partition by brand order by year_month desc) result,
  9         year_month
 10  from test
 11  order by year_month ;

BRAN     RESULT YEAR_MO
---- ---------- -------
nike         50 2018-01
nike         50 2018-02
nike         50 2018-03
nike         50 2018-04

SQL>
0 голосов
/ 01 марта 2019
select brand,
       (select result 
        from (
            select result
            from your_table
            order by to_date(year_month,'yyyy-mm') desc
            ) 
        where rownum = 1
        ) result,
       year_month
from your_table;
...