我有以下代码:一列连接表不受WHERE子句,我的SQL
SELECT YEAR(user.reg_date) AS year,
MONTH(user.reg_date) AS month,
DATE (
CASE
WHEN DAYOFWEEK(user.reg_date) >= 2
THEN DATE_SUB(user.reg_date, INTERVAL(DAYOFWEEK(user.reg_date) - 2) DAY)
ELSE DATE_ADD(user.reg_date, INTERVAL 1 DAY)
END
) AS week_of,
count(*) AS signups,
COUNT(CASE
WHEN user.gender = 'M'
THEN user.user_id
END) AS males,
COUNT(CASE
WHEN user.gender = 'F'
THEN user.user_id
END) AS females,
(
SELECT COUNT(*)
FROM unsubscribe
INNER JOIN user ON user.token = unsubscribe.token
WHERE DATE (DATETIME) BETWEEN week_of
AND DATE_ADD(week_of, INTERVAL 6 DAY)
) AS unsubscribe
FROM user
INNER JOIN place ON user.place_id = place.place_id
WHERE user.reg_date IS NOT NULL
AND YEAR(user.reg_date) >= YEAR(CURDATE()) - 2
AND place.contained_by = '207'
GROUP BY CONCAT (
YEAR(user.reg_date),
'/',
WEEK(user.reg_date)
)
ORDER BY week_of;
我的决赛桌结果几乎工作,但所谓退订在连接表中的列将不受影响/不通过过滤最后的声明,我不知道为什么。
编辑: 这是我得到的结果。模式是正确的,但是所有列都通过place_id EXCEPT进行过滤以取消订阅。我需要取消订阅,也可以通过place_id进行过滤。
|year |month |week_of |signups |males |females |unsubscribe |
|2015 |1 |2014-12-29 |5 |1 |4 |269 |
你可能会需要一个嵌套查询。 – LSerni
什么是“最后哪里声明”? –
@JNevill感谢您的编辑!对不起,这是新的! – knod