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

时间:2010-02-25 19:56:22

标签: sql optimization sqlite

我正在尝试做一个看起来应该是一个简单的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)

有什么想法吗?

谢谢!

1 个答案:

答案 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