[英]SQL join: counting rows and get most recent row from another table
好的,因此我已经有了一个相当复杂的SQL语句来获取我的信息,但是我需要在其中添加其他内容。
基本上,这些项目获得文件计数以及与它们相关联的文件类型计数(以及其他功能)...
我还需要获取平面图和演示文稿的最新文件的ID,以及另一个单独的字段
SELECT
items.*,
designers.name AS designer,
locations.name AS location,
COUNT(DISTINCT files.id) AS files,
SUM(files.type = 'floorplan') AS floorplans,
SUM(files.type = 'presentation') AS presentations,
SUM(files.type = 'photo') AS photos
FROM
items
LEFT JOIN designers
ON items.designer_id = designers.id
JOIN locations
ON items.location_id = locations.id
LEFT JOIN files
ON (items.id = files.item_id)
WHERE items.location_id = 8
GROUP BY items.id
我已经看过其他关于联接另一个表的最新行的QA,但是它们基于没有联接开始,而对于现有查询,我什至不知道从哪里开始。 我仍然需要文件计数,并且不能两次加入表。
综上所述,我需要所有这些以及最新的平面图和最新演示文稿的ID。 文件具有包含unix时间戳记的date_uploaded列。
如果仅需要基于文件类型的文件ID,则可以在GROUP_CONCAT
中将CASE
与ORDER BY
和SUBSTRING_INDEX()
以仅选择最新的ID。
SELECT ...,
SUBSTRING_INDEX(
GROUP_CONCAT(
CASE
WHEN files.type = 'floorplan'
THEN files.id
ELSE NULL
END ORDER BY date_uploaded DESC
) ,',',1) AS floorplans_fileid,
SUBSTRING_INDEX(
GROUP_CONCAT(
CASE
WHEN files.type = 'presentation'
THEN files.id
ELSE NULL
END ORDER BY date_uploaded DESC
) ,',',1) AS presentations_fileid
...
FROM ...
这样,根据条件,您只能拥有最新的文件ID,而不能拥有该行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.