我有一个数据集,其中列出了ID(EmployeeID),以季度和年为单位的时间段,四位数代码,年份的后两个数字是前两个数字,四分之一是后两个数字。 2013年第1季度将为“ 1301”(季度),其中包括在职员工和以前的员工。它还具有销售(销售)。数据集每个ID每季度有一行。我需要最近一个季度的销售。
这是我的代码:
select EmployeeID, max(Quarter), Sales
from dataset;
显然这是错误的,因为它希望我按员工编号和销售额等进行分组,并且为每个员工编号提供多个行。
参见上文。
我需要每个EmployeeID 1行的输出,以提供他们最近的季度以及该季度的销售额。
答案 0 :(得分:0)
无需使用窗口函数,就可以创建一个派生表,该表具有每位员工和最大季度的一条记录,然后将内部联接返回到数据集。
;WITH MaxQuarter AS(select EmployeeID, MaxQuarter = max(Quarter) from dataset)
select EmployeeID, Quarter, Sales
from dataset ds
inner join MaxQuarter m on m.EmployeeID = ds.EmployeeID and m.MaxQuarter = ds.Quarter
答案 1 :(得分:0)
如果您使用的是SQL Server,则可以使用公用表表达式
WITH MaxQuarters(EmployeeID, MaxQuarter)
AS
(
SELECT EmployeeID, MAX(Quarter) as MaxQuarter
FROM dataset
GROUP BY EmployeeID
)
SELECT EmployeeID, Quarter, Sales
FROM dataset ds
JOIN MaxQuarters mq on ds.EmployeeID = mq.EmployeeID
答案 2 :(得分:0)
上一季度的所有销售额:
select *
from dataset
where quarter = (select max(quarter) from dataset);
员工持续进行的所有销售(即每位员工上一个季度=上个季度不同)
select *
from dataset
where (employeeid, quarter) in
(
select employeeid, max(quarter)
from dataset
group by employeeid
);
答案 3 :(得分:0)
如果要获得最近的一个季度总体信息:
select ds.*
from dataset ds
where ds.quarter = (select max(ds2.quarter) from dataset ds2);
如果您想要每个员工最多 :
select ds.*
from dataset ds
where ds.quarter = (select max(ds2.quarter)
from dataset ds2
where ds2.employeeid = ds.employeeid
);
或者,在Oracle中,您可以使用keep
和聚合:
select employeeid, max(quarter),
max(sales) keep (dense_rank first order by quarter desc) as sales
from dataset
group by employeeid