我有2张桌子
像这样的第一张桌子被称为捐助者
+----------------+------------------------+--------+
| Donor_ID | Address_Validated_Date | Source |
+----------------+------------------------+--------+
| Character Data | 01JUN2016 | Web |
+----------------+------------------------+--------+
我有第二张桌子有捐款
+---------------+----------------+
| Donation_Date | Donor_ID |
+---------------+----------------+
| 01MAY2015 | Character data |
+---------------+----------------+
Donation_Date的值可以为0,表示无捐赠,或者多个日期都可以反映捐赠日期,例如
+---------------+----------+
| Donation_Date | Donor_ID |
+---------------+----------+
| 01MAY2015 | 1 |
| 02MAY2015 | 1 |
| 0 | 2 |
+---------------+----------+
我需要的是一个表,其中列出了Donor_ID,Address_Validated_Date,带有第一个Donation_Date的源(例如,对于Donor_ID为1的2015年1月1日)或0(如果没有捐赠)。
每个Donor_ID应该出现一次-每个Donor_ID应该有一条记录。复杂的是它应该在最近的两个月内,所以Address_Validated_Date应该从2019年4月1日开始。
然后,我需要创建另一列以显示Donation_Date和Address_Validated_Date之间的天数差异。最终输出应为
+----------+------------------------+--------+---------------+------------+
| Donor_ID | Address_Validated_Date | Source | Donation_Date | Days_After |
+----------+------------------------+--------+---------------+------------+
答案 0 :(得分:0)
SELECT D.Donor_ID
,D.Address_Validated_Date
,D.Source
,CASE
WHEN DS.Donation_Date IS NULL
OR DATE (DS.Donation_Date) = '18000101'
THEN CONVERT(VARCHAR(100), DS.Donation_Date)
ELSE 0
END AS Donation_Date
,DS.Days_After
FROM Donors D
LEFT JOIN (
SELECT Donar_ID
,MIN(Donation_Date) AS Donation_Date
FROM donations
GROUP BY Donar_ID
) DS
ON D.Donor_ID = DS.Donor_ID
WHERE DATE(D.Address_Validated_Date)>='20190401'
答案 1 :(得分:0)
是的,您可以按照以下方式使用DATEDIFF函数
DATEDIFF(时间间隔,STARTING_DATE,ENDING_DATE)
您的查询将如下
SELECT DM.Donor_ID,DM.Address_Validated_Date,DM.Source,
D.Donation_Date,DATEDIFF(DAY,DM.Address_Validated_Date,D.Donation_Date) asDays_After
FROM Donor D
LEFT JOIN DonorMaster DM on DM.Donor_ID=D.Donor_ID