【发布时间】:2018-11-19 21:10:06
【问题描述】:
我有一张表 (SPG),其中包含人员 (DonorID)、捐赠日期 (DonateDate) 和捐赠地点 (Center)。我想找到捐赠的日期和地点(简单),然后是下一次捐赠的日期和地点,以及两个日期之间的间隔。
我使用了一个 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 返回的多个字段相结合。
(请原谅不同的符号 - 大量复制和粘贴试用代码)
【问题讨论】: