【问题标题】:How to select the record with max id and sum the values?如何选择具有最大 id 的记录并对值求和?
【发布时间】:2020-07-19 09:53:02
【问题描述】:

我在 SQL Server 中有下表:

category    consumption total   id
-----------------------------------
A           40          100     1
A           60          200     2
B           60          100     6
B           40          200     7
C           10           50     3

预期输出:

consumption total
------------------
100         400

逻辑:

  1. 仅选择类别 - A、B
  2. 如果类别中存在多条记录 - A、B。请选择一条 ID 为 MAX 的记录
  3. 将消耗和总计相加并显示结果

A 类,有 2 条记录可用:选择 MAX id 的记录。 在这种情况下,MAX id = 2。消费 = 60,总计 = 200

类别 B,有 2 条记录可用:选择具有 MAX id 的记录。 在这种情况下,MAX id = 7。消费 = 40,总计 = 200

输出将是消耗量和总量的总和。

我能够为一个类别起草以下查询,但如何获得另一个类别和总和:

  Select 
      s.consumption, s.total, s.rn
  From 
      (select
           consumption, total
           row_number() over (partition by category order by id desc) as rn
       from 
           [dbo].[Table_1]
       where 
           category = ‘A’) as s
where 
    s.rn = 1

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    使用 row_number() 窗口函数返回类别和聚合的最大 id 行:

    select sum(t.consumption), sum(t.total)
    from (
      select *, row_number() over (partition by category order by id desc) as rn
      from [dbo].[Table_1]   
      where category in ('A', 'B')
    ) t
    where t.rn = 1
    

    【讨论】:

      【解决方案2】:

      我认为你过于复杂了。

      试试这个

      select s.consumption,s.total,s.category
      from
      table s 
      where id in 
      (select max(Id) as id from table group by category) 
      and category in ('A','B')  -- Or any other conditions
      

      子查询返回

      • 2
      • 7
      • 3

      所以,只需获取这些 id 编号的关联值

      【讨论】:

      • 抱歉,已修复查询
      猜你喜欢
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 2021-08-10
      • 2015-11-28
      • 1970-01-01
      相关资源
      最近更新 更多