我有桌子
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只显示时间上的最新值
预期结果
sensor_id, event_type value
2 2 2
2 3 54
2 4 -42
3 2 7我已经尝试过查询
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来解决这个问题,这方面有区别吗?
发布于 2015-04-06 23:43:36
使用聚合来获取最大时间,然后使用连接来获取与该时间匹配的其余记录:
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;发布于 2015-04-07 00:03:05
也可以试试下面的。
选择sensor_id、event_type、value、time
从事件
where time in (从按sensor_id、event_type分组的事件组中选择最大(时间))
希望这也能很好地工作。
发布于 2017-02-16 04:31:51
通过这种方式,它可以正常工作
-- 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 ASChttps://stackoverflow.com/questions/29474458
复制相似问题