首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用内连接从表中检索最新的时间戳行

使用内连接从表中检索最新的时间戳行
EN

Stack Overflow用户
提问于 2014-10-01 03:28:37
回答 2查看 1.3K关注 0票数 1

希望从表中检索名称行的最新时间戳。但是,只有表“位置”有时间戳。我使用内部连接将表"elderly1“和"location”连接在一起。我只能证明我已经从表“位置”检索到了最新的“纬度”和“经度”。请帮帮忙。

查询

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-01 03:54:06

很难在不知道每个表的候选键的情况下说很多话,但通常您必须确保SELECT子句在功能上依赖于GROUP BY子句。鉴于你对这个问题的表述,我建议如下:

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2014-10-01 03:49:19

如果(arduino_mac,时间戳)元组在location表中是唯一的,您可以这样做:

代码语言:javascript
运行
复制
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的每个值获取“最新时间戳”。(如果有合适的索引可用,视图查询的性能将是最好的。

代码语言:javascript
运行
复制
  ... ON location (arduino_mac,timestamp)

我们可以使用时间戳的值检索该行上的其他列,并连接到location表。

请注意,如果给定的arduino_mac有两个(或更多)行具有相同的最新“时间戳”值,则此查询将检索具有匹配时间戳的所有行,并且将不确定这些行中的哪一行将保留在组按操作之后。(如果我们得到保证(arduino_mac,时间戳)是唯一的,这将不是一个问题。在更一般的情况下)

同样,如果elderly中有多个具有相同elderly值的行,并且有不同的arduino_mac值,则不确定检索并返回了哪些匹配的location行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26133655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档