繁体   English   中英

MySQL如何从另一个表中加入最新日期的记录

[英]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表中的最新日期。

表格: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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM