从SQL中的和窗口函数中排除第一行和最后一行

时间:2013-04-26 10:55:06

标签: sum aggregate-functions

我正在执行以下查询

SELECT QLID, Emp_Date, Emp_Time, sum(emp_time) over(partition by qlid order by emp_time)
FROM GCC_INTERNAL_OPS.Entry_Time where (qlid='fs255015' or qlid='mf255005') and emp_date=date '2013-01-31'

返回以下结果集

QLID    Emp_Date    Emp_Time    Group Sum(Emp_Time)
FS255015    01/31/2013  1218    5390.00
FS255015    01/31/2013  1523    5390.00
FS255015    01/31/2013  1526    5390.00
FS255015    01/31/2013  1123    5390.00
MF255005    01/31/2013  0932    15033.00
MF255005    01/31/2013  0936    15033.00
MF255005    01/31/2013  1106    15033.00
MF255005    01/31/2013  1332    15033.00
MF255005    01/31/2013  1338    15033.00
MF255005    01/31/2013  1348    15033.00
MF255005    01/31/2013  1509    15033.00
MF255005    01/31/2013  1544    15033.00
MF255005    01/31/2013  1617    15033.00
MF255005    01/31/2013  1639    15033.00
MF255005    01/31/2013  1732    15033.00

我想在每个qlid的求和中排除第一行和最后一行。关于我将如何做的任何想法?

1 个答案:

答案 0 :(得分:1)

尝试:

;with cte as
(SELECT e.*,
        row_number() over(partition by qlid order by emp_time) rna,
        row_number() over(partition by qlid order by emp_time desc) rnd
 FROM Entry_Time e
 where (qlid='fs255015' or qlid='mf255005') and emp_date='2013-01-31')
SELECT QLID, 
       Emp_Date, 
       Emp_Time, 
       sum(case when 1 in (rna,rnd) then 0 else emp_time end) 
          over(partition by qlid) conditional_sum
FROM cte 

SQLFiddle here