Tengo la siguiente tabla en 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

Salida esperada :

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

Lógica:

  1. Elija solo las categorías: A, B
  2. Si hay varios registros disponibles en las categorías: A, B. Elija un registro con ID máx.
  3. Suma el consumo y el total y muestra los resultados

Categoría A, 2 registros están disponibles: Seleccione el registro con ID MAX. En este caso, MAX id = 2. consumo = 60, total = 200

Categoría B, hay 2 registros disponibles: Seleccione el registro con ID MAX. En este caso, MAX id = 7. consumo = 40, total = 200

La producción será la suma del consumo y el total.

Pude redactar la consulta a continuación para una categoría, pero cómo obtener otra categoría y suma:

  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
1
pyds_learner 19 jul. 2020 a las 12:53

2 respuestas

La mejor respuesta

Use la función de ventana row_number () para devolver la fila con el ID máximo para ambas categorías y agregado:

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
1
forpas 19 jul. 2020 a las 10:10

Creo que lo estás complicando demasiado.

Prueba esto

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

La subconsulta regresa

  • 2
  • 7
  • 3

Entonces, simplemente obtenga los valores asociados con estos números de identificación

0
Sparky 19 jul. 2020 a las 10:11