oracle 我想找到每次subcat更改或返回的第一个日期,特定的子cat可能会被报告多次[重复]

e0bqpujr  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(178)

此问题在此处已有答案

I wanna get query result Group By and Orderd by Date(2个答案)
Pick lowest row in a group(2个答案)
Sql Grouping by change Date(3个答案)
上个月关门了。
我正在处理一个oracle数据库。
| 客户|类别|子类别|日期|
| --|--|--|--|
| 1 |饲料|粒料|2023年10月5日|
| 1 |饲料|干草|23年9月18日|
| 1 |饲料|粒料|23年8月6日|
| 1 |饲料|粒料|23年7月4日|
| 1 |饲料|粒料|21-六月_23|
| 1 |配件|铅|23年5月15日|
| 1 |配件|铅|23年3月1日|
对于每个客户和类别,我需要他们每次返回到子类别的第一个日期。例如,颗粒是在6月21日首次购买的,之后又购买了几次,然后他们切换到了干草-所以我们将报告该行,然后返回到颗粒,所以再次需要该行。
| 客户|类别|子类别|日期|
| --|--|--|--|
| 1 |饲料|粒料|2023年10月5日|
| 1 |饲料|干草|23年9月18日|
| 1 |饲料|粒料|21-六月_23|
| 1 |配件|铅|23年3月1日|
从上述数据
Min与group by不起作用,因为它只会给我给予子类别的第一个示例,我希望他们每次返回到子类别的第一个日期。
看看这里的其他问题,我想分区可能会有帮助,但我似乎不能让它正常工作。也许排名属于那里的某个地方?
我觉得这是真的很容易和明显的人谁知道他们在做什么,但显然这不是我,因为我只有几个步骤过去选择 * 从……
提前向您提供任何帮助。

htrmnn0y

htrmnn0y1#

你有一个gaps and islands问题,你可以使用两个row_numbers之间的差异来给予一个唯一的id给每个连续的行组:

with cte as (
  select Customer,
       Category,
       Subcategory,
       purchase_date,
       row_number() over (partition by Customer, Category order by purchase_date) -
       row_number() over (partition by Customer, Category, Subcategory order by purchase_date) as grp
  from mytable
)
select CUSTOMER, CATEGORY, SUBCATEGORY, min(PURCHASE_DATE) as PURCHASE_DATE
from cte
group by CUSTOMER, CATEGORY, SUBCATEGORY, grp
order by CUSTOMER, CATEGORY desc, PURCHASE_DATE desc

字符串
Demo here

相关问题