table - fu_plan_user (id_plan_user,id_user, id_plan, valid_from, valid_to, ...)
table - fu_user (id_user, name, company....)
table - fu_plan (id_plan, name, duration, ...)
这是表结构。
我想生成一个帐户列表,其中包含一个月末(第30天)的关闭(valid_to)日期,此日期应该在将来,例如grater而不是今天的日期(NOW())。公司名称不应包含“试用”字样。
结果应包含以下字段
id_user, name (from table fu_plan), company (from table fu_user), valid_to (from table fu_plan_user)
像这样的东西 原始查询(不正确)
SELECT usr.id_user, payplan.name, usr.foretag, planUser.da_valid_to
from fu_plan_user planUser, fu_user usr, fu_plan payplan left join
fu_user usr
on planUser.id_user=usr.id_user
where planUser.da_valid_to > now() and
planUser.da_valid_to >= DATEADD(d, -30, getdate()) ;
答案 0 :(得分:1)
在您的解释之后,并且只有当您的数据库是MySQL时,我建议使用此查询:
SELECT user.id_user, plan.name, user.company, pbyu.valid_to
FROM fu_plan_user AS fbyu
JOIN fu_user AS user
ON user.id_user = fbyu.id_user
JOIN fu_plan AS plan
ON plan.id_plan = fbyu.id_plan
WHERE pbyu.valid_to > NOW()
AND LAST_DAY(pbyu.valid_to) = pbyu.valid_to
AND user.company NOT LIKE '%trial%';
如果公司不仅是小写值,您应该使用LOWER()。 LAST_DAY()函数将从valid_to日期的最后一天开始。