我有一个看起来像这样的表
CREATE TABLE mytable (
id SERIAL PRIMARY KEY,
ts TIMESTAMP,
expected_departure TIMESTAMP,
aimed_departure TIMESTAMP,
stop TEXT,
service TEXT,
vehicle_ref TEXT
)
我想找到出现标识符(stop, service, vehicle_ref)
的最后一条记录,以及没有同一ts
的行都返回相同的(stop, service, vehicle_ref)
的第一条记录。
我尝试了许多不同的方法来做,但是还没弄清楚。
如果可以简化查询操作,则可以重组数据,甚至切换到时间序列数据库。
编辑: 这是一个示例,为简单起见,省略了日期:
// First API call
id: 1,
ts: 10:00:00,
aimed_departure: 10:30:00
expected_departure: 10:31:00,
stop: 1,
service: 2,
vehicle_ref: 1000
id: 2,
ts: 10:00:00,
aimed_departure: 10:50:00,
expected_departure: 10:50:00,
stop: 1,
service: 3,
vehicle_ref: 2000
// Second API call
id: 3,
ts: 10:32:00,
aimed_departure: 10:50:00,
expected_departure: 10:50:00,
stop: 1,
service: 3,
vehicle_ref: 2000
我想标识id=1,3
并从中进行选择,因为有一个服务(stop: 1, service: 2, vehicle_ref: 1000
)出现在第一个API调用中(ts:10:00:00),但没有出现在第二,({ts: 10:32:00
)。
服务出现的地方可能有很多电话,但我只对最后一次出现的电话感兴趣,而第一次却没有,只要ts
之间的差值不大间隔。
答案 0 :(得分:0)
只使用max和min并子查询和所有并集
select id,stop, service, vehicle_ref from
(
select stop, service, vehicle_ref,T1.id from mytable T1 inner join
(select max(id) as id from mytable ) as T2
on T1.id=T2.id
)TT1
union all
select TT4.id,stop, service, vehicle_ref from mytable TT2
inner join
(
select min(id) as id from
(
select stop, service, vehicle_ref,min(id) as id from mytable
group by stop, service, vehicle_ref
) TT3
) TT4 on TT2.id=TT4.id
这是输出
id stop service vehicle_ref
3 1 3 2000
1 1 2 1000