我正在执行以下查询并返回所有行,无论日期如何:
SELECT DISTINCT p.name, p.category, u.f_name, t.name
FROM (
prizes p, tags t, results r
)
LEFT JOIN
users u
ON (r.user_id = u.id)
LEFT JOIN
f_tag_lookup tl
ON (tl.tag_id = t.id)
WHERE r.tag_id = t.id
AND r.date BETWEEN concat(date_format(LAST_DAY(now() - interval 1 month), '%Y-%m-'),'01') AND last_day(NOW() - INTERVAL 1 MONTH)
r.date
是一个日期时间字段。有三行包含上个月的日期,三行包含本月的日期,但我收到所有行?
非常感谢任何指针。我想在上个月的第一天和最后一天之间返回结果,即7月的所有结果。
感谢,
答案 0 :(得分:3)
你能不能只使用month()日期函数?
e.g。使用month(date)= month(now())作为过滤器。
如果你有超过一年的数据,你还需要在年(日期)=年(now())上匹配。
我不确定表现,但我这样表达它似乎更具可读性。
SELECT DISTINCT p.name, p.category, u.f_name, t.name
FROM (prizes p, tags t, results r)
LEFT JOIN users u ON (r.user_id = u.id)
LEFT JOIN f_tag_lookup tl ON (tl.tag_id = t.id)
WHERE r.tag_id = t.id AND
month(r.date) = month(now()) AND
year(r.date) = year(now())
答案 1 :(得分:0)
想通了。有关日期的SQL很好,但JOINS错了。谢谢你的回复。