我正在尝试做一个看起来应该是一个简单的SQL操作,但我只是找不到正确的语法来快速完成它。我正在使用SQLite。
基本问题是我有一个主键为(objUid,time)的表。它包含objUid,time和frame列。出于这个问题的目的,框架是一个不透明的值。
我想提取每个objUid: objUid,minTime,minTime时帧的值,maxTime,maxTime处帧的值。
......我想尽快做到。
我现在有这个,但是如果我拿出“NATURAL JOIN”语句(这意味着我没有得到“框架”列),事情的速度大约是其两倍。
SELECT * FROM (
SELECT * FROM (
SELECT objUid, min(time) as minTime, max(time) as maxTime FROM motion GROUP BY objUid
) NATURAL JOIN (
SELECT objUid, time as minTime, frame as minFrame FROM motion
)
) NATURAL JOIN (SELECT objUid, time as maxTime, frame as maxFrame FROM motion)
有什么想法吗?
谢谢!
答案 0 :(得分:2)
使用:
SELECT x.objuid,
y.time,
y.frame,
z.time,
z.frame
FROM (SELECT m.objuid,
MIN(m.time) AS min_time,
MAX(m.time) AS max_time
FROM MOTION m
GROUP BY m.objuid) x
JOIN MOTION y ON y.objuid = x.objuid
AND y.time = x.min_time
JOIN MOTION z ON z.objuid = x.objuid
AND z.time = x.max_time