[英]MySQL How to join records from another table which date is latest
我有以下选择SQL查询:
SELECT i.instagrammer_id, CONCAT(i.first_name,' ',i.last_name) AS instagrammer_name, FLOOR(DATEDIFF (NOW(), i.date_of_birth)/365) AS age, i.date_of_birth, i.gender, i.email, i.created_date, GROUP_CONCAT(b.name_en) AS industrie_branch, coalesce(c.long_name, '') AS long_name, s.social_id
FROM instagrammer AS i
LEFT JOIN social_login AS s ON s.instagrammer_id = i.instagrammer_id
LEFT JOIN industries_branches b ON FIND_IN_SET(b.industrie_branch_id, i.industrie_branch)
LEFT JOIN country_data c ON c.short_name = i.based_in_country
WHERE i.status IS NOT NULL
GROUP BY i.instagrammer_id
ORDER BY instagrammer_name DESC
并获取此记录:
现在,我想通过匹配来自高于SQL结果的social_id
从另一个表中加入,但有一个条件,我需要记录statistic_instagrammer_detail
表中的最新日期。
id instagrammer_id followers created_date
** *************** ********* *******************
28 440024439 190 2015-12-10 09:37:03
27 12095962 390 2015-12-10 09:36:03
26 2238046564 544 2015-12-10 09:35:03
25 481959735 780 2015-12-10 09:34:04
24 440024439 151 2015-12-09 09:54:02
23 12095962 210 2015-12-09 09:53:02
22 2238046564 403 2015-12-09 09:52:02
21 481959735 659 2015-12-09 09:51:09
我想从截图结果中添加followers
:
followers
*********
190
390
544
780
任何想法如何做到这一点?
您需要在statistic_instagrammer_detail
表上创建一个子查询,该子查询按instagrammer_id
返回该表中的max(created_date)
,然后将statistic_instagrammer_detail
表加入该表以获取followers
。
SELECT i.instagrammer_id, CONCAT(i.first_name,' ',i.last_name) AS instagrammer_name, FLOOR(DATEDIFF (NOW(), i.date_of_birth)/365) AS age, i.date_of_birth, i.gender, i.email, i.created_date, GROUP_CONCAT(b.name_en) AS industrie_branch, coalesce(c.long_name, '') AS long_name, s.social_id, st.followers
FROM instagrammer AS i
LEFT JOIN social_login AS s ON s.instagrammer_id = i.instagrammer_id
LEFT JOIN industries_branches b ON FIND_IN_SET(b.industrie_branch_id, i.industrie_branch)
LEFT JOIN country_data c ON c.short_name = i.based_in_country
LEFT JOIN (SELECT instagrammer_id, max(created_date) as maxdate from statistic_instagrammer_detail group by instagrammer_id) t on i.instagrammer_id=t.instagrammer_id
LEFT JOIN statistic_instagrammer_detail st ON i.instagrammer_id=st.instagrammer_id and t.maxdate=st.created_date
WHERE i.status IS NOT NULL
GROUP BY i.instagrammer_id
ORDER BY instagrammer_name DESC
但是请注意,您的查询将仅在某些配置设置下在mysql中运行,并且违反sql标准,因为它包含选择列表中的字段,这些字段不在group by子句中,也不进行汇总。
SELECT i.instagrammer_id, CONCAT(i.first_name,' ',i.last_name) AS instagrammer_name, FLOOR(DATEDIFF (NOW(), i.date_of_birth)/365) AS age, i.date_of_birth, i.gender, i.email, i.created_date, GROUP_CONCAT(b.name_en) AS industrie_branch, coalesce(c.long_name, '') AS long_name, s.social_id,st.followers
FROM instagrammer AS i
LEFT JOIN statistic_instagrammer_detail as st ON i.instagrammer_id=st.instagrammer_id
LEFT JOIN social_login AS s ON s.instagrammer_id = i.instagrammer_id
LEFT JOIN industries_branches b ON FIND_IN_SET(b.industrie_branch_id, i.industrie_branch)
LEFT JOIN country_data c ON c.short_name = i.based_in_country
WHERE i.status IS NOT NULL and st.created_date=(select MAX(created_date) from statistic_instagrammer_detail)
GROUP BY i.instagrammer_id
ORDER BY instagrammer_name DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.