我必须显示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;