我该如何显示Oracle SQL中每一行的最后记录的结果



我必须显示Oracle SQL

中每一行的最后一个记录的结果

示例: -

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

我riquried是

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

根据上个月的记录,我每个月都必须传播这个问题,我在大型跨国公司面试中遇到的问题

类似的东西?

  • partition确保每个品牌都有自己的结果
  • order by告诉它获得属于最后一个year_month
  • result

我修改了输入数据,以表明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>
SELECT brand, Max(result) OVER(PARTITION BY brand), year_month
FROM brand;

问题不清楚。这是您要寻找的吗?

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;

最新更新