2011-07-11 32 views
1

我在MySQL数据库中的四个表,我试图创建一个连接所有四个从日志表拉动的最新数据查询:加入4桌在MySQL中,最大行从一个表

  • 评级(ID,等级,设备ID,listingId)
  • 数据(listingId,名称,位置)
  • 设备(设备ID,型号)
  • 日志(dateAdded,DEVICEID,appVersion)

我想显示: 评级,名称,地点,型号,应用程序版本

应用程序版本随时间变化,因此它与设备表保持分离。

以下查询让我在那里的一半。问题是appVersion不是最新的。

SELECT ratings.id,ratings.listingId,ratings.rating,data.name,devices.model,tt.appVersion 
FROM ratings 
JOIN data on ratings.listingId = data.id 
JOIN devices on ratings.deviceIdentifier = devices.deviceIdentifier 
JOIN (select max(dateAdded), appVersion, deviceIdentifier from logs) tt 
ORDER BY dateAdded DESC; 

如果我尝试以下任一语句,查询将超时。

SELECT ratings.id,ratings.listingId,ratings.rating,data.name,devices.model,tt.appVersion 
FROM ratings 
JOIN data on ratings.listingId = data.id 
JOIN devices on ratings.deviceIdentifier = devices.deviceIdentifier 
JOIN (select max(dateAdded), appVersion, deviceIdentifier from logs where dateAdded in  
(select max(dateAdded) from logs group by deviceIdentifier)) tt 
ORDER BY dateAdded DESC; 

SELECT ratings.id,ratings.listingId,ratings.rating,data.name,devices.model,logs.appVersion 
FROM ratings 
JOIN data on ratings.listingId = data.id 
JOIN devices on ratings.deviceIdentifier = devices.deviceIdentifier 
JOIN (select t.deviceIdentifier, t.appVersion 
    from logs t 
    inner join (select deviceIdentifier, max(dateAdded) as dateAdded from logs 
      group by deviceIdentifier) x 
      on t.deviceIdentifier = x.deviceIdentifier and t.dateAdded = x.dateAdded) tt 
ORDER BY dateAdded DESC; 

回答

1

编辑:修正小bug。我已经测试过这个,它工作。

set @deviceId := 0; 
select * 
from (select r.id, r.listingId, r.rating, data.name, d.model, d.deviceId, l.appVersion 
    FROM ratings r 
    JOIN data on r.listingId = data.listingId 
    JOIN devices d on r.deviceId = d.d eviceId 
    JOIN logs l on l.deviceId = d.deviceId 
    ORDER BY d.deviceId, dateAdded DESC) x 
where @deviceId != deviceId 
and (@deviceId := deviceId) is not null; 
+0

谢谢......除了我只看到独特的deviceIds,这个工程很棒。 – sho

+0

我想我有。如果我拿出“where”语句并将其替换为“group by id”,我会得到期望的结果。 – sho