mysql 计算前几个月未出现的结果
mysql count results not already present in previous months
我有 2 个 table,1 个 table "months" 和 1 个 table "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。
有什么想法吗?
嗯。听起来您想计算每年第一次出现电子邮件的时间。如果是,则使用两个聚合:
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 ;
我有 2 个 table,1 个 table "months" 和 1 个 table "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。
有什么想法吗?
嗯。听起来您想计算每年第一次出现电子邮件的时间。如果是,则使用两个聚合:
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 ;