Я пытаюсь добиться следующего, не используя sub-запрос.Вопрос о SQL-группировке
Для финансирования я хотел бы выбрать самую последнюю созданную дату письма и «самый ранний рабочий список, созданный с момента создания письма» для получения финансирования.
FundingId Leter (1, 1/1/2009)(1, 5/5/2009) (1, 8/8/2009) (2, 3/3/2009) FundingId WorkList (1, 5/5/2009) (1, 9/9/2009) (1, 10/10/2009) (2, 2/2/2009)
Ожидаемый результат -
FundingId Leter WorkList (1, 8/8/2009, 9/9/2009)
Я написал запрос следующим образом. У него есть ошибка. Он будет опускать те FundingId, для которых минимальная дата WorkList меньше, чем последняя дата письма (даже если у нее есть другой рабочий список с датой, большей, чем дата письма).
CREATE TABLE #Funding(
[Funding_ID] [int] IDENTITY(1,1) NOT NULL,
[Funding_No] [int] NOT NULL,
CONSTRAINT [PK_Center_Center_ID] PRIMARY KEY NONCLUSTERED ([Funding_ID] ASC)
) ON [PRIMARY]
CREATE TABLE #Letter(
[Letter_ID] [int] IDENTITY(1,1) NOT NULL,
[Funding_ID] [int] NOT NULL,
[CreatedDt] [SMALLDATETIME],
CONSTRAINT [PK_Letter_Letter_ID] PRIMARY KEY NONCLUSTERED ([Letter_ID] ASC)
) ON [PRIMARY]
CREATE TABLE #WorkList(
[WorkList_ID] [int] IDENTITY(1,1) NOT NULL,
[Funding_ID] [int] NOT NULL,
[CreatedDt] [SMALLDATETIME],
CONSTRAINT [PK_WorkList_WorkList_ID] PRIMARY KEY NONCLUSTERED ([WorkList_ID] ASC)
) ON [PRIMARY]
SELECT F.Funding_ID,
Funding_No,
MAX (L.CreatedDt),
MIN(W.CreatedDt)
FROM #Funding F
INNER JOIN #Letter L ON L.Funding_ID = F.Funding_ID
LEFT OUTER JOIN #WorkList W ON W.Funding_ID = F.Funding_ID
GROUP BY F.Funding_ID,Funding_No
HAVING MIN(W.CreatedDt) > MAX (L.CreatedDt)
Как написать правильный запрос без использования подзапроса?
Пожалуйста, помогите
Благодарности
Lijo
этот сервер sql? –
Да. Это находится в SQL Server 2005 – Lijo