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

多くのクエリを試しましたが、期待した結果が得られません。私が欲しいのは、上記の結果の最初の2つの値です。つまり、

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

SQLServerのLIMIT10..20で、結果セットのサイズを制限する方法を調べることをお勧めします。次に、ここでサブクエリを計算する方法http://www.sqlteam.com/article/aggregating-correlated-sub-queries

于 2012-06-21T05:09:53.263 に答える
0

SQL Server 2005以降を使用している場合 (質問で指定しなかった場合)、次のROW_NUMBER関数で CTE (Common Table Expression) を使用できます。

;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ます。それで、基本的には上の 2 行を選択して合計します。

于 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 に答える