sql - que - Obtenga la última fecha para cada registro
sql max group by (4)
Así es como lo haría
;WITH CTE AS
(
Select PartId, MAX(LASTUPDATED) as ''MAXX'' from part group by PartId
)
Select TransActionId, p.PartId, Description, p.LASTUPDATED
from Part p
inner join CTE on p.LastUpdated = CTE.MAXX
and p.PartId = CTE.PartId
Tengo una tabla de historial (como un registro) que registra los cambios en las partes:
TransactionID Part ID Description Last Updated
1 1 Fixed O-ring 2006-03-14 20:00:04.700
2 2 Replaced coil 2009-01-02 20:00:04.700
3 1 Replaced coil 2009-01-02 20:00:04.700
4 1 Replaced LED 2002-08-20 20:00:04.700
5 2 Sealed leakage 2007-03-08 20:00:04.700
6 3 Replace connector 2004-05-16 20:00:04.700
Tengo otra tabla que mostrará lo que significa cada ID de pieza, pero ese no es el problema que estoy enfrentando ahora. Estoy obligado a escribir una consulta que devuelva el último mantenimiento hecho en cada parte. Entonces, en este caso, mi resultado esperado sería:
TransactionID Part ID Description Last Updated
2 2 Replaced coil 2009-01-02 20:00:04.700
3 1 Replaced coil 2009-01-02 20:00:04.700
6 3 Replace connector 2004-05-16 20:00:04.700
Explicación: Por ejemplo, el último mantenimiento para la Parte ID # 1 se completó el 2009-01-02 20: 00: 04.700 y así sucesivamente.
He intentado SELECT DISTINCT
pero no funcionará porque básicamente todas las filas serán diferentes. Estoy completamente fuera de pista. Y si uso MAX(Last Updated)
, solo devolverá una fila de la tabla completa.
Editado: en cualquier caso, NO puedo usar la consulta dinámica.
SELECT TransactionID
,PartID
,[Description]
,[Last Updated]
FROM (
SELECT TransactionID
,PartID
,[Description]
,[Last Updated]
,ROW_NUMBER() OVER (PARTITION BY [PartID] ORDER BY [Last Updated] DESC) RN
FROM TableName
)A
WHERE A.RN = 1
O puedes usar CTE
;WITH CTE AS
(
SELECT TransactionID
,PartID
,[Description]
,[Last Updated]
,ROW_NUMBER() OVER (PARTITION BY [PartID] ORDER BY [Last Updated] DESC) RN
FROM TableName
)
SELECT TransactionID
,PartID
,[Description]
,[Last Updated]
FROM CTE
WHERE A.RN = 1
SELECT t.TransactionID, t.PartID, t.Description, t.LastUpdated
FROM History t
JOIN (SELECT PartID, MAX(TransactionID)
FROM History
GROUP BY PartID) t2 ON t.PartID = t2.PartID
AND t.TransactionID = t2.TransactionID
también funcionará
select
TransactionID, PartID, Description, LastUpdated
from
History H
where
LastUpdated =
(
select
max(LastUpdated)
from
History
where
PartID = H.PartID
)