根据订单选择并汇总最后的记录

时间:2013-01-28 15:13:17

标签: sql sql-server-2005

我在表格中有不同版本的收费。我想抓住并按类型分组最后一笔费用。

所以我想添加9.87,9.63,1.65。

我想要父ID,总和(9.87 + 9.63 + 1.65)作为此查询的结果。

我们使用MSSQL

ID  ORDER   CHARGES     TYPE    PARENT ID           
1   1       6.45        1       1
2   2       1.25        1       1
3   3       9.87        1       1
4   1       6.54        2       1
5   2       5.64        2       1
6   3       0.84        2       1
7   4       9.63        2       1
8   1       7.33        3       1
9   2       5.65        3       1
10  3       8.65        3       1
11  4       5.14        3       1
12  5       1.65        3       1

4 个答案:

答案 0 :(得分:4)

WITH recordsList
AS
(
    SELECT Type, Charges,
            ROW_NUMBER() OVER (PArtition BY TYPE
                                ORDER BY [ORDER] DESC) rn
    FROM tableName
)
SELECT  SUM(Charges) totalCharge
FROM recordsLIst
WHERE rn = 1

答案 1 :(得分:3)

使用row_number()标识要求和的行,然后将它们相加:

select SUM(charges)
from (select t.*,
             ROW_NUMBER() over (PARTITION by type order by id desc) as seqnum
      from t
     ) t
where seqnum = 1

答案 2 :(得分:1)

或者,您可以使用窗口聚合MAX()

SELECT SUM(Charges)
FROM (
  SELECT
    [ORDER],
    Charges,
    MaxOrder = MAX([ORDER]) OVER (PARTITION BY [TYPE])
  FROM atable
) s
WHERE [ORDER] = MaxOrder
;

答案 3 :(得分:0)

SELECT t.PARENT_ID, SUM(t.CHARGES)
FROM dbo.test73 t
WHERE EXISTS (
              SELECT 1
              FROM dbo.test73
              WHERE [TYPE] = t.[TYPE]
              HAVING MAX([ORDER]) = t.[ORDER]
              )
GROUP BY t.PARENT_ID

SQLFiddle上的演示