2012-06-21 91 views
1

我想获得的总和(COMPRATE)仅MAX(effdt),具有MAX(ID)从下列查询,上述查询的选择在SQL Server中最大的日期和COMPRATE的总和

SELECT id, employee_code, effdt, comprate 
FROM   dbo.employees_compensation 
WHERE  (employee_code = '000321514') 
ORDER BY effdt desc, id desc 

结果如下,

id  employee_code effdt     comprate 
1473433 000321514  2010-09-02 00:00:00.000 46000 
1473432 000321514  2010-09-02 00:00:00.000 138000 
1453627 000321514  2010-09-02 00:00:00.000 46000 
1453626 000321514  2010-09-02 00:00:00.000 138000 
1447165 000321514  2010-09-02 00:00:00.000 46000 
1447164 000321514  2010-09-02 00:00:00.000 138000 
1424948 000321514  2010-09-02 00:00:00.000 46000 
1424947 000321514  2010-09-02 00:00:00.000 138000 
1405789 000321514  2010-09-02 00:00:00.000 46000 
1405788 000321514  2010-09-02 00:00:00.000 138000 

我试过许多查询,但我没有得到预期的结果。我要的是从上面的结果,即顶前两个值,

id employee_code effdt     comprate 
1473433 000321514 2010-09-02 00:00:00.000 46000 
1473432 000321514 2010-09-02 00:00:00.000 138000 

,然后得到上述结果的总和(COMPRATE)即

sum(comprate) 
184000 

你能帮我得到预期的结果?提前致谢。

回答

0

以下情况如何?

SELECT  SUM(comprate) AS ComprateSum 
FROM   (SELECT  TOP (2) id, employee_code, effdt, comprate 
         FROM   _Test 
         WHERE  (employee_code = '000321514') 
         ORDER BY effdt DESC, id DESC) AS derivedtbl_1 
0

子查询计算该ROW_NUMBER功能:

;WITH OrderedData AS 
(
    SELECT 
     id, employee_code, effdt, comprate, 
     RowNum = ROW_NUMBER() OVER(ORDER BY effdt DESC, id DESC) 
    FROM   
     dbo.employees_compensation 
    WHERE  
     employee_code = '000321514' 
    FROM dbo.YourTable 
) 
SELECT 
    SUM(comprate) 
FROM 
    OrderedData 
WHERE 
    RowNum <= 2 

这CTE订单数据和ROW_NUMBER功能手了序列号,从1开始,并通过effdt DESC, id DESC订购 - 所以最新的行(最新effdt和最高id)得到RowNum = 1。那么我基本上选择最上面的两行并且总结它们。

相关问题