希望从表中检索名称行的最新时间戳。但是,只有表“位置”有时间戳。我使用内部连接将表"elderly1“和"location”连接在一起。我只能证明我已经从表“位置”检索到了最新的“纬度”和“经度”。请帮帮忙。
查询
SELECT e.name,e.illness, e.patient_id,e.patient_image,e.area, e.arduino_mac,
l.arduino_mac, l.latitude, l.longitude,MAX(l.timestamp) as ts
FROM elderly1 e
JOIN location l
on e.arduino_mac = l.arduino_mac
WHERE e.arduino_mac = l.arduino_mac
GROUP BY e.name
ORDER BY l.timestamp发布于 2014-10-01 03:54:06
很难在不知道每个表的候选键的情况下说很多话,但通常您必须确保SELECT子句在功能上依赖于GROUP BY子句。鉴于你对这个问题的表述,我建议如下:
SELECT e.name,e.illness, e.patient_id,e.patient_image,e.area, e.arduino_mac,
l.arduino_mac, l.latitude, l.longitude, l.timestamp as ts
FROM elderly1 e
JOIN ( SELECT l1.arduino_mac, l1.latitude, l1.longitude, l1.timestamp
FROM location l1
WHERE timestamp = ( SELECT MAX(timestamp)
FROM LOCATION l2
WHERE l1.arduino_mac = l2.arduino_mac )
) as l
on e.arduino_mac = l.arduino_mac
ORDER BY l.timestamp发布于 2014-10-01 03:49:19
如果(arduino_mac,时间戳)元组在location表中是唯一的,您可以这样做:
SELECT e.name
, e.illness
, e.patient_id
, e.patient_image
, e.area
, e.arduino_mac
, l.arduino_mac
, l.latitude
, l.longitude
, l.timestamp
FROM elderly1 e
JOIN ( SELECT d.arduino_mac
, MAX(d.timestamp) AS latest_ts
FROM location d
GROUP BU d.arduino_mac
) f
ON f.arduino_mac = e.arduino_mac
JOIN location l
ON l.arduino_mac = f.arduino_mac
AND l.timestamp = f.lastest_ts
GROUP BY e.name
ORDER BY l.timestamp内联视图f为arduino_mac的每个值获取“最新时间戳”。(如果有合适的索引可用,视图查询的性能将是最好的。
... ON location (arduino_mac,timestamp)我们可以使用时间戳的值检索该行上的其他列,并连接到location表。
请注意,如果给定的arduino_mac有两个(或更多)行具有相同的最新“时间戳”值,则此查询将检索具有匹配时间戳的所有行,并且将不确定这些行中的哪一行将保留在组按操作之后。(如果我们得到保证(arduino_mac,时间戳)是唯一的,这将不是一个问题。在更一般的情况下)
同样,如果elderly中有多个具有相同elderly值的行,并且有不同的arduino_mac值,则不确定检索并返回了哪些匹配的location行。
https://stackoverflow.com/questions/26133655
复制相似问题