SQL:在A列最小的地方快速获取B列的值

dia*_*ers 5 sql sqlite optimization

我正在尝试做一些似乎应该是一个简单的SQL操作,但我只是没有找到正确的语法来快速完成它.我正在使用SQLite.

基本问题是我有一个主键为(objUid,time)的表.它包含objUid,time和frame列.出于此问题的目的,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)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢!

OMG*_*ies 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
Run Code Online (Sandbox Code Playgroud)