记录下,今天终于会用oracle分组函数了,这个逻辑可把我绕蒙圈了。。。
说明如下:
需要查客户最新两个月的数据。但是数据库存储的最小维度是周。
所以需要查最新两个月,并且是每个周是最大的数据。
分组需要按照多个维度分组。然后排序。
- 分组出每个月的周,倒叙排列
- 每个月只取一条数据,取排名第一的,得到不重复的月
- 把月进行倒叙,取前两个
简单记录下,有空再完善。 本质上是个排名的问题。
SELECT * FROM
(
SELECT * FROM
(
SELECT
"id",
"year",
"month",
"week",
"evaluation_way",
"product_type",
"customer",
row_number ( ) over
(
PARTITION BY "month", "product_type", "customer"
ORDER BY "year" DESC, "month" DESC, "week" DESC
) AS rn
FROM
"C_E_INFO"
WHERE
"customer" = 'LGE'
AND "evaluation_way" = 'Z'
)
WHERE
rn <= 1
ORDER BY
"month" DESC
)
WHERE
ROWNUM <= 2
数据看起来比较清晰点
最开始的数据
第一次分组处理
只取月的
只取最近的两条