首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从最近的记录中选择数值?

如何从最近的记录中选择数值?
EN

Stack Overflow用户
提问于 2015-04-06 23:39:09
回答 5查看 1.8K关注 0票数 0

我有桌子

代码语言:javascript
运行
复制
create table events (
  sensor_id integer not null,
  event_type integer not null,
  value integer not null,
  time timestamp unique not null);

insert into events
values
(2,2,5,"2014-02-13 12:42:00"),
(2,4,-42,"2014-02-13 13:19:57"),
(2,2,2,"2014-02-13 14:48:30"),
(3,2,7,"2014-02-13 12:54:39"),
(2,3,54,"2014-02-13 13:32:36");

我希望每个sensor_id和event_type只显示时间上的最新值

预期结果

代码语言:javascript
运行
复制
sensor_id, event_type   value
2          2            2
2          3            54
2          4            -42
3          2            7

我已经尝试过查询

代码语言:javascript
运行
复制
SELECT sensor_id,event_type,value, time
from events
group by sensor_id,event_type
having time = max(time)

为什么不成功(结果表不包含sensor_id =2和event_type = 2)

我如何同时使用mysql和sqllite来解决这个问题,这方面有区别吗?

EN

回答 5

Stack Overflow用户

发布于 2015-04-06 23:43:36

使用聚合来获取最大时间,然后使用连接来获取与该时间匹配的其余记录:

代码语言:javascript
运行
复制
SELECT e.sensor_id, e.event_type, e.value, e.time
from events e join
     (select sensor_id, event_type, max(time) as maxt
      from events e
      group by sensor_id, event_type
     ) ee
     on e.sensor_id = ee.sensor_id and e.event_type = ee.event_type;
票数 0
EN

Stack Overflow用户

发布于 2015-04-07 00:03:05

也可以试试下面的。

选择sensor_id、event_type、value、time

从事件

where time in (从按sensor_id、event_type分组的事件组中选择最大(时间))

希望这也能很好地工作。

票数 0
EN

Stack Overflow用户

发布于 2017-02-16 04:31:51

通过这种方式,它可以正常工作

代码语言:javascript
运行
复制
-- write your code in PostgreSQL 9.4
SELECT
    E1.SENSOR_ID,
    COUNT(E1.EVENT_TYPE) AS "TYPES"
FROM
    (
        SELECT 
            DISTINCT
            E.SENSOR_ID,
            E.EVENT_TYPE
        FROM
            EVENTS E
    ) E1
GROUP BY E1.SENSOR_ID
ORDER BY E1.SENSOR_ID ASC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29474458

复制
相关文章

相似问题

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