【发布时间】:2016-02-09 22:59:27
【问题描述】:
我有一个包含员工 ID、年份 ID、客户 ID 和销售数量的表格。例如:
--------------------------------------
id_emp | id_year | sales | client id
--------------------------------------
4 | 1 | 14 | 1
4 | 1 | 10 | 2
4 | 2 | 11 | 1
4 | 2 | 17 | 2
对于一名员工,我想获取具有每年最低销售额和上一年最低销售额的行。
我尝试的查询之一如下:
select distinct
id_emp,
id_year,
MIN(sales) OVER(partition by id_emp, id_year) AS min_sales,
LAG(min(sales), 1) OVER(PARTITION BY id_emp, id_year
ORDER BY id_emp, id_year) AS previous
from facts
where id_emp = 4
group by id_emp, id_year, sales;
我得到了结果:
-------------------------------------
id_emp | id_year | sales | previous
-------------------------------------
4 | 1 | 10 | (null)
4 | 1 | 10 | 10
4 | 2 | 11 | (null)
但我希望得到:
-------------------------------------
id_emp | id_year | sales | previous
-------------------------------------
4 | 1 | 10 | (null)
4 | 2 | 11 | 10
【问题讨论】:
-
您使用的是 Oracle 还是 Microsoft SQL Server?
-
如果要得到上一年,为什么要在LAG函数中按年分区?
标签: sql-server oracle oracle11g analytics window-functions