SQL连接:计算行并从另一个表中获取最新的行

时间:2014-06-05 11:59:22

标签: mysql sql join multiple-tables

好的,所以我已经有了一个相当复杂的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列。

1 个答案:

答案 0 :(得分:1)

如果您只需要基于文件类型的文件ID,则CASE GROUP_CONCAT ORDER BYSUBSTRING_INDEX()中的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 ... 只能选择最新的

{{1}}

这样,您可以根据条件

获得最新的文件ID,而不是行