2012-06-21 2 views
1

Я пытаюсь получить сумму (comprate) только для макс (effdt), имеющий максимум (ID) из следующего запросаВыбор макс дата и сумма comprate в SQL сервере

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

Если вы используете SQL Server 2005 или новее (вы не указали в своем вопросе), вы можете использовать КТР (Common Таблицы Expression) с 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 

Этот КТР заказывает ваши данные и ROW_NUMBER функция раздает последовательные номера, начиная с 1 и заказанные effdt DESC, id DESC - так последнюю строку (последняя effdt и высокие id), получает RowNum = 1. Итак, я в основном выбираю две верхние строки и суммирую их.

Смежные вопросы