У меня есть таблица (SPG) с персоной (DonorID), датами Пожертвования (DonateDate) и местом Пожертвования (Центр).Я хотел бы найти дату и место пожертвования (легко), а затем дату и место следующего пожертвования с разрывом между двумя датами.
Я использовал подзапрос SELECT, который дает мнеСледующая дата (NextDate), но я не могу тогда получить соответствующий Центр:
SELECT SPG.DonorID,
SPG.DonateDate,
SPG.Center AS Center1,
(SELECT Min(DonateDate) as MinDate
FROM SPG As A
WHERE SPG.DonorID = A.DonorID
AND A.DonateDate > SPG.DonateDate) AS NextDate,
[NextDate]-[DonateDate] AS Gap
FROM SPG
GROUP BY SPG.DonorID, SPG.DonateDate, SPG.Center
HAVING ((((SELECT Min(DonateDate) as MinDate
FROM SPG As A
WHERE SPG.DonorID = A.DonorID
AND A.DonateDate > SPG.DonateDate))<>""))
ORDER BY SPG.DonorID, SPG.DonateDate;
У меня есть другой запрос INNER JOIN, который дает мне Центр, но он возвращает все будущие пожертвования, а не только следующее:
SELECT A.DonorID,
A.DonateDate,
A.Center,
Min(B.DonateDate) AS NextDate,
B.Center,
[B].[DonateDate]-[A].[DonateDate] AS Gap
FROM SPG AS A INNER JOIN SPG AS B ON A.DonorID = B.DonorID
WHERE B.DonateDate > A.DonateDate
GROUP BY A.DonorID,
A.DonateDate,
A.Center,
B.Center,
B.DonateDate-A.DonateDate;
В принципе, я не могу объединить команду Min () из подзапроса с возвратом больше, чем поле из JOIN.
(Прошу прощения за другое обозначение -много копирования и вставки пробного кода)