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;
谢谢......除了我只看到独特的deviceIds,这个工程很棒。 – sho
我想我有。如果我拿出“where”语句并将其替换为“group by id”,我会得到期望的结果。 – sho