1

我试图从以下查询中获取仅具有 max(id) 的 max(effdt) 的 sum(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

然后从上面的结果中得到 sum(comprate) 即,

sum(comprate)
184000

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

4

3 回答 3

0

我建议在LIMIT 10..20 in SQL Server 中查找如何限制结果集的大小。然后如何在这里对子查询进行计算http://www.sqlteam.com/article/aggregating-correlated-sub-queries

于 2012-06-21T05:09:53.263 回答
0

如果您使用的是 SQL Server 2005或更高版本(您没有在问题中指定),则可以将 CTE(公用表表达式)与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. 那么我基本上选择前两行并总结它们。

于 2012-06-21T05:24:27.490 回答
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
于 2012-06-21T05:37:25.877 回答