需要显示特定用户在该目标月份完成了多少billing_amount? 我有两个表,一个是目标,另一个是closure_emp。
SELECT fk_user_id,target_month,target
FROM `target`
WHERE fk_user_id='31' and target_month > DATE_SUB(now(), INTERVAL 6 MONTH)
这显示了6条记录
fk_user_id target_month target
31 2013-08-01 100000
31 2013-09-01 100000
31 2013-10-01 120000
31 2013-11-01 120000
31 2013-12-01 120000
和
SELECT *
FROM `closure_employee`
WHERE ce_recruiter_id='31' and offer_date > DATE_SUB(now(), INTERVAL 7 MONTH)
这显示了2条记录
user_id billing_amount offer_date joining_date
31 390000 2013-08-30 2-09-2013
31 208354 2013-09-30 25-11-2013
我需要一个查询来将表格显示在一个
中 fk_user_id target_month target user_id billing_amount
31 2013-08-01 100000 31 390000
31 2013-09-01 100000 31 208354
31 2013-10-01 120000 31 null
31 2013-11-01 120000 31 null
31 2013-12-01 120000 31 null
请帮帮我。
答案 0 :(得分:2)
您似乎可以在表格之间使用LEFT JOIN
来获得结果。由于您要返回target
表中的所有行,然后LEFT JOIN
上的closure_employee
表格会user_id
。
要为billing_amount
中的每一行指定正确的target
,您需要使用month()
和target_month
的{{1}}值 - 这也是你加入条件的一部分。
查询类似于以下内容:
offer_date
见SQL Fiddle with Demo。您会注意到返回前7个月的select t.fk_user_id,
t.target_month,
t.target,
e.user_id,
e.billing_amount
from target t
left join closure_employee e
on t.fk_user_id = e.user_id
and month(t.target_month) = month(e.offer_date)
and e.offer_date > DATE_SUB(now(), INTERVAL 7 MONTH)
where t.target_month > DATE_SUB(now(), INTERVAL 6 MONTH);
过滤器已添加到连接条件而不是where子句中 - 这样做仍将返回该时间范围内offer_date
的行,但它也将返回closure_employee
表中所有行,这似乎是您想要的行为。
如果您需要按target
和ce_recruiter_id
添加过滤器,则可以将上述查询更改为:
fk_user_id
答案 1 :(得分:-1)
SELECT
t1.fk_user_id, t1.target_month, t1.target, t2.billing_amount
FROM
target AS t1, closure_employee AS t2
WHERE
t1.fk_user_id = 31 AND t2.user_id = 31
AND
t1.target_month > DATE_SUB(now(), INTERVAL 6 MONTH);
希望有帮助(并且有效 - 不在我的脑海中!
这假设您的查询的fk_user_id = user_id
您还应该查看如何在表格上使用JOIN -
http://dev.mysql.com/doc/refman/5.0/en/join.html
然而,您可能希望从一个更简单的示例开始,以了解它!