繁体   English   中英

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

[英]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中将CASEORDER BYSUBSTRING_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.

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