我有2张桌子,1张桌子"月份和#34;和1个表" ad"。我希望每月收到来自广告的所有不同电子邮件,这些电子邮件在一年中的前几个月尚未计算在内。
我今天就像这样:
SELECT months.id_month, Count(DISTINCT ad.email)
FROM `months`
LEFT JOIN `ad`
ON id_month = Month(ad.created_at)
AND Year(ad.created_at) = 2015
GROUP BY id_month
ORDER BY id_month ASC
输出:
但是在12月份,发现的3封不同的电子邮件已经在11月,12月的预期输出应为0。
有什么想法吗?
答案 0 :(得分:2)
嗯。听起来你想要计算每年第一次发送电子邮件。如果是,则使用两个聚合:
SELECT m.id_month, Count(ad.email)
FROM months m LEFT OUTER JOIN
(SELECT ad.email, MIN(ad.created_at) as created_at_2015
FROM `ad`
WHERE Year(ad.created_at) = 2015
GROUP BY ad.email
) ad
ON m.id_month = Month(ad.created_at_2015)
GROUP BY m.id_month
ORDER BY m.id_month ASC ;