Так много способов кошки кошки ... Протестируйте каждый, чтобы узнать, что лучше работает с вашим дизайном стола и РСУБД. Я уверен, что тоже пропустил некоторые пути.
оконном ФУНКЦИИ
SELECT *
FROM ( SELECT Event.EventID,
Event_Reps.LastName ,
Event_reps.FirstName,
Cost.EventDate,
MAX(Cost.EventDate) OVER(PARTITION BY EventID) [MaxEventDate]
FROM Cost WITH(NOLOCK)
INNER JOIN Event WITH(NOLOCK)
ON Cost.EventID = Event.EventID
INNER JOIN Event_Reps WITH(NOLOCK)
ON Cost.EventRep = Event_Reps.EventRep
WHERE Event.EventID = 66
AND Event_Reps.Division = 'Houston'
AND Cost.CostAmt = 0
) as table1
WHERE MaxEventDate = EventDate
ИЛИ
SELECT *
FROM ( SELECT Event.EventID,
Event_Reps.LastName ,
Event_reps.FirstName,
Cost.EventDate,
ROW_NUMBER() OVER(PARTITION BY EventID ORDER BY Cost.EventID) [RowNumber]
FROM Cost WITH(NOLOCK)
INNER JOIN Event WITH(NOLOCK)
ON Cost.EventID = Event.EventID
INNER JOIN Event_Reps WITH(NOLOCK)
ON Cost.EventRep = Event_Reps.EventRep
WHERE Event.EventID = 66
AND Event_Reps.Division = 'Houston'
AND Cost.CostAmt = 0
) as table1
WHERE RowNumber = 1
ИЛИ агрегатах
SELECT *
FROM ( SELECT Event.EventID,
Event_Reps.LastName ,
Event_reps.FirstName,
Cost.EventDate,
ROW_NUMBER() OVER(PARTITION BY EventID ORDER BY Cost.EventID) [RowNumber]
FROM Cost WITH(NOLOCK)
INNER JOIN Event WITH(NOLOCK)
ON Cost.EventID = Event.EventID
INNER JOIN Event_Reps WITH(NOLOCK)
ON Cost.EventRep = Event_Reps.EventRep
INNER JOIN
( SELECT EventID, MAX(EventDate) [EventDate]
FROM Cost
GROUP BY EventID
) MaxCost
ON MaxCost.EventID = Cost.EventID
AND MaxCost.EventDate = Cost.EventDate
WHERE Event.EventID = 66
AND Event_Reps.Division = 'Houston'
AND Cost.CostAmt = 0
) as table1
ИЛИ СТАЛ
SELECT *
FROM ( SELECT Event.EventID,
Event_Reps.LastName ,
Event_reps.FirstName,
Cost.EventDate,
ROW_NUMBER() OVER(PARTITION BY EventID ORDER BY Cost.EventID) [RowNumber]
FROM Cost WITH(NOLOCK)
INNER JOIN Event WITH(NOLOCK)
ON Cost.EventID = Event.EventID
INNER JOIN Event_Reps WITH(NOLOCK)
ON Cost.EventRep = Event_Reps.EventRep
LEFT JOIN Cost c2
ON c2.EventID = Cost.EventID
AND c2.EventDate > Cost.EventDate
WHERE Event.EventID = 66
AND Event_Reps.Division = 'Houston'
AND Cost.CostAmt = 0
AND Cost.EventID IS NULL
) as table1
ИЛИ СУЩЕСТВУЕТ
SELECT *
FROM ( SELECT Event.EventID,
Event_Reps.LastName ,
Event_reps.FirstName,
Cost.EventDate,
ROW_NUMBER() OVER(PARTITION BY EventID ORDER BY Cost.EventID) [RowNumber]
FROM Cost WITH(NOLOCK)
INNER JOIN Event WITH(NOLOCK)
ON Cost.EventID = Event.EventID
INNER JOIN Event_Reps WITH(NOLOCK)
ON Cost.EventRep = Event_Reps.EventRep
WHERE Event.EventID = 66
AND Event_Reps.Division = 'Houston'
AND Cost.CostAmt = 0
AND NOT EXISTS
( SELECT 1
FROM Cost c2
WHERE c2.EventID = Cost.EventID
AND c2.EventDate > Cost.EventDate
)
) as table1
Какую версию SQL вы используете? –
** Что ** система баз данных, а какая версия? ** SQL ** - это только язык структурированных запросов - язык, используемый многими системами баз данных - SQL - это ** НЕ ** продукт базы данных ... такие вещи, как это очень часто зависят от поставщика, - поэтому нам действительно нужно знать, что система баз данных, которую вы используете. –