如何编写以下sql查询

时间:2015-10-01 12:01:12

标签: mysql sql

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()) ;

1 个答案:

答案 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日期的最后一天开始。