SQL Server - agrupar sql

 
Vista:

agrupar sql

Publicado por stephy (8 intervenciones) el 10/12/2020 19:10:56
Hola,

estoy realizndo un query en sql, pero me quede atascada en una parte.

quiero agrgar una columna, donde me diga el valor que tiene cada ID en su ultima fecha.

tengo los datos id, valor y fecha, y me gustaria obtener ultimo valor (que me lo da la ultima fecha)

gracias
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

agrupar sql

Publicado por Isaias (4416 intervenciones) el 11/12/2020 20:00:34
Muestra tu query y la descripción de tus tablas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

agrupar sql

Publicado por stephy (8 intervenciones) el 19/01/2021 16:39:34
Id Fecha Valor Ultimo valor
001 01/01/2021 98.5 100
002 11/12/2020 35.5 67.9
003 11/09/2020 80.9 15.6
002 15/12/2020 67.9 67.9
001 08/01/2021 100 100
003 15/11/2020 15.6 15.6

quiero obtener la ultima columna, por cada id que me de el valor que sale en la ultima fecha

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

agrupar sql

Publicado por Isaias (4416 intervenciones) el 19/01/2021 21:32:47
Creo que es muy simple, solo debes hacer un MAX de Valor, agrupado por ID y FECHA, ¿cierto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

agrupar sql

Publicado por Isaias (4416 intervenciones) el 19/01/2021 23:13:04
Veamos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
declare  @mytabla table
(id char(3), Fecha SmallDateTime, Valor decimal (10,2))
insert into @mytabla values (
'001',convert(SmallDateTime,'01/01/2021'), 98.5),
('002',convert(SmallDateTime,'11/12/2020'), 35.5),
('003',convert(SmallDateTime,'11/09/2020'), 80.9),
('002',convert(SmallDateTime,'12/15/2020'), 67.9),
('001',convert(SmallDateTime,'08/01/2021'), 100.0),
('003',convert(SmallDateTime,'11/15/2020'), 15.6)
 
select t1.id
, t1.Fecha
, t1.Valor
, t2.[Ultimo Valor]
from @mytabla t1 inner join
 (SELECT id, MAX(Valor) as [Ultimo Valor] from @mytabla group by id) t2
 on t1.id = t2.id
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

agrupar sql

Publicado por stephy (8 intervenciones) el 25/01/2021 14:20:50
Hola,

pero aquí no esta la fecha. aquí me saldría el valor máximo pero quiero saber el valor que esta en la ultima fecha por id por lo menos hay dos de 001 pero la ultima fecha es 8 de enero del 2021 entonces el ultimo valor es 100.

Id Fecha Valor Ultimo valor
001 01/01/2021 98.5 100
002 11/12/2020 35.5 67.9
003 11/09/2020 80.9 15.6
002 15/12/2020 67.9 67.9
001 08/01/2021 100 100
003 5/11/2020 5.6 15.6

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

agrupar sql

Publicado por Isaias (4416 intervenciones) el 27/01/2021 02:20:22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
declare  @mytabla table
(id char(3), Fecha SmallDateTime, Valor decimal (10,2))
insert into @mytabla values (
'001',convert(SmallDateTime,'01/01/2021'), 98.5),
('002',convert(SmallDateTime,'11/12/2020'), 35.5),
('003',convert(SmallDateTime,'11/09/2020'), 80.9),
('002',convert(SmallDateTime,'12/15/2020'), 67.9),
('001',convert(SmallDateTime,'08/01/2021'), 100.0),
('003',convert(SmallDateTime,'11/15/2020'), 15.6)
 
select t1.id
, t1.Fecha
, t1.Valor
, t2.[Ultimo Valor]
from @mytabla t1 inner join
 (SELECT id, MAX(Fecha) Fecha, MAX(Valor) as [Ultimo Valor] from @mytabla group by id) t2
 on t1.id = t2.id
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

agrupar sql

Publicado por stephy (8 intervenciones) el 27/01/2021 15:03:02
gracias

lo entiendo pero en el caso real que pensaba que no me iba a traer ninguna dificultar es que la fecha la tengo en otro tabla.

entonces cuando hago la query me dice que fecha no corresponde a esa tabla. como puedo colocar las dos tablas?

no se si me entiendes

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

agrupar sql

Publicado por Isaias (4416 intervenciones) el 27/01/2021 18:46:03
No se dice "NO SE SI ME ENTIENDES", suena un poco agresivo para quien se lo dices, lo correcto es "NO SE SI ME EXPLICO".

¿Como unir dos tablas?, con un JOIN

1
2
3
SELECT T1.C1, T2.C2
FROM Tabla1 T1 JOIN Tabla2 T2
ON T1.CAMPO = T2.COMPO

CAMPO. une a ambas tablas que tienen un ALIAS (T1, T2)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

agrupar sql

Publicado por stephy (8 intervenciones) el 28/01/2021 18:12:32
Perdona por la forma que respondí. no quise ser maleducada. tienes razón suena mejor decir no se si me explico.

gracias por tu ayuda. no estoy muy claro aun como puedo juntar las dos cosas pero gracias seguiré investigando

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

agrupar sql

Publicado por Isaias (4416 intervenciones) el 28/01/2021 19:09:37
Manda la descripción EXACTA de tus dos tablas y me ayudarías con el INSERT de los datos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

agrupar sql

Publicado por stephy (8 intervenciones) el 28/01/2021 20:03:17
hola,

te cuento, tengo dos tablas con muchas columnas pero ya tengo avanzado el query en sql para la unión de estas dos tablas y obtener los datos que necesito.

pero ahora me están pidiendo que quieren saber cual es el valor de la ultima fecha por id.

entonces tengo en la tabla uno:

id modelo xxx zzzzz yyyyy rrrrr valor
34001 25A 1001 1.0.3 Balanced 17 0.96
34001 25A 1001 1.0.3 Balanced 16 0.96
34001 25A 1001 1.0.3 Balanced 15 0.96
34001 25A 1001 1.0.3 Balanced 14 0.96
34001 25A 1001 1.0.3 Balanced 13 0.96
44001 14A 1000 1.0.3 Balanced 245 0.94
44001 14A 1000 1.0.3 Balanced 358 0.98
44001 14A 1000 1.0.3 Balanced 331 0.98
44001 14A 1000 1.0.3 Balanced 184 0.94
44001 14A 1000 1.0.3 Balanced 316 0.98
44001 14A 1000 1.0.3 Balanced 129 0.94
44001 14A 1000 1.0.3 Balanced 281 0.98
44001 14A 1000 1.0.3 Balanced 281 0.98
44002 26A 1000 1.0.3 Balanced 47 0.99
44002 26A 1000 1.0.3 Balanced 47 0.99
44002 26A 1000 1.0.3 Balanced 167 1.00
44002 26A 1000 1.0.3 Balanced 167 1.00
44002 26A 1000 1.0.3 Balanced 54 0.99
44002 26A 1000 1.0.3 Balanced 54 0.99
44002 26A 1000 1.0.3 Balanced 54 0.99
44002 26A 1000 1.0.3 Balanced 360 0.99
44002 26A 1000 1.0.3 Balanced 486 0.99
44002 26A 1000 1.0.3 Balanced 476 0.99
44002 26A 1000 1.0.3 Balanced 309 1.01
44006 26A 1000 1.0.3 Balanced 58 0.98
44006 26A 1000 1.0.3 Balanced 10 1.00
44006 26A 1000 1.0.3 Balanced 249 0.97

y en la tabla dos tengo:


id model fecha
34001 25A 17/11/2020 22:38
34001 25A 10/12/2020 19:11
34001 25A 22/12/2020 15:37
34001 25A 14/11/2020 0:05
34001 25A 13/01/2021 22:58
44001 14A 17/11/2020 23:32
44001 14A 15/12/2020 2:18
44001 14A 15/06/2020 19:09
44001 14A 05/01/2021 18:10
44001 14A 10/05/2020 14:00
44001 14A 13/09/2020 13:30
44001 14A 13/09/2020 13:30
44001 14A 01/09/2020 14:02
44002 26A 01/09/2020 14:02
44002 26A 20/04/2020 14:00
44002 26A 08/11/2020 13:59
44002 26A 08/11/2020 13:59
44002 26A 04/11/2020 18:17
44002 26A 04/11/2020 18:17
44002 26A 20/01/2021 15:18
44002 26A 20/01/2021 15:18
44002 26A 02/04/2020 13:48
44002 26A 13/11/2020 0:24
44002 26A 26/11/2020 0:52
44006 26A 24/09/2020 15:56
44006 26A 24/09/2020 1:49
44006 26A 04/09/2020 14:44

entonces ya tengo mi query creada con la nueva tabla con los datos que necesito (obtenido de estas dos tablas)

ahora necesito agregar a mi nueva tabla una columna que me de el valor que sale en la ultima fecha filtrado por id

algo así:

id model fecha zzzzz yyyyy rrrrrrr valor ultimo valor por fecha
34001 25A 17/11/2020 22:38 1.0.3 Balanced 17 0.96 0.96
34001 25A 10/12/2020 19:11 1.0.3 Balanced 16 0.96 0.96
34001 25A 22/12/2020 15:37 1.0.3 Balanced 15 0.96 0.96
34001 25A 14/11/2020 0:05 1.0.3 Balanced 14 0.96 0.96
34001 25A 13/01/2021 22:58 1.0.3 Balanced 13 0.96 0.96
44001 14A 17/11/2020 23:32 1.0.3 Balanced 245 0.94 0.94
44001 14A 15/12/2020 2:18 1.0.3 Balanced 358 0.98 0.94
44001 14A 05/01/2021 18:10 1.0.3 Balanced 184 0.94 0.94
44001 14A 10/05/2020 14:00 1.0.3 Balanced 316 0.98 0.94
44001 14A 13/09/2020 13:30 1.0.3 Balanced 129 0.94 0.94
44001 14A 13/09/2020 13:30 1.0.3 Balanced 281 0.98 0.94
44001 14A 01/09/2020 14:02 1.0.3 Balanced 281 0.98 0.94
44002 26A 01/09/2020 14:02 1.0.3 Balanced 47 0.99 0.99
44002 26A 20/04/2020 14:00 1.0.3 Balanced 47 0.99 0.99
44002 26A 08/11/2020 13:59 1.0.3 Balanced 167 1.00 0.99
44002 26A 08/11/2020 13:59 1.0.3 Balanced 167 1.00 0.99
44002 26A 04/11/2020 18:17 1.0.3 Balanced 54 0.99 0.99
44002 26A 04/11/2020 18:17 1.0.3 Balanced 54 0.99 0.99
44002 26A 20/01/2021 15:18 1.0.3 Balanced 54 0.99 0.99
44002 26A 20/01/2021 15:18 1.0.3 Balanced 360 0.99 0.99
44002 26A 02/04/2020 13:48 1.0.3 Balanced 486 0.99 0.99
44002 26A 13/11/2020 0:24 1.0.3 Balanced 476 0.99 0.99
44002 26A 26/11/2020 0:52 1.0.3 Balanced 309 1.01 0.99
44006 26A 24/09/2020 15:56 1.0.3 Balanced 58 0.98 0.98
44006 26A 24/09/2020 1:49 1.0.3 Balanced 10 1.00 0.98
44006 26A 04/09/2020 14:44 1.0.3 Balanced 249 0.97 0.98


quiero obtener la ultima columna filtrado por id y por la ultima fecha y que me refleje el valor de esta ultima fecha

como se podría hacer en inner join ?

gracias
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

agrupar sql

Publicado por Isaias (4416 intervenciones) el 28/01/2021 20:38:37
Pues esta muy interesante, pero si no me ayudas a mitigar el trabajo, tengo que teclear TODO

Descripción de mi tabla, ejemplo:

1
2
3
CREATE TABLE [Application].[Cities](
	[CityID] [int] NOT NULL,
	[LastRecordedPopulation] [bigint] NULL)

Inserción de mis registros

1
2
3
4
INSERT INTO [Application].[Cities] VALUES
(100, 1000000),
(200, 1010000),
(300, 1020000)

Así por cada una de tus tablas

¿Me explico?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

agrupar sql

Publicado por stephy (8 intervenciones) el 28/01/2021 21:35:05
es que no tengo que crear la tabla, yo las tablas las tengo de mi base de datos solo tengo que agruparlas.

esto me estaba funcionando perfectamente:

1
2
3
4
5
6
7
8
select t1.id
, t1.Fecha
, t1.Valor
, t2.[Ultimo Valor]
from @mytabla t1
inner join
 (SELECT id, MAX(Valor) as [Ultimo Valor] from @mytabla group by id) t2
 on t1.id = t2.id

solo el problema es que me sale solo el máximo valor en la nueva columna no el valor que representa en la ultima fecha (que es lo que quiero que refleje)

claro anexe la fecha como me dijiste, pero esta fecha esta en otra tabla entonces me da el mensaje que fecha no sale en la tabla que esta escrita en from:

1
2
3
4
5
6
7
select t1.id
, t1.Fecha
, t1.Valor
, t2.[Ultimo Valor]
from @mytabla t1 inner join
 (SELECT id, MAX(Fecha) Fecha, MAX(Valor) as [Ultimo Valor] from @mytabla group by id) t2
 on t1.id = t2.id

trate de hacer dos inner join pero me da error no se como juntar la fecha ya que esta en otra tabla.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar