SQL: быстрое получение значения столбца B там, где столбец A является минимальным - PullRequest
5 голосов
/ 25 февраля 2010

Я пытаюсь сделать то, что кажется простой операцией SQL, но я просто не могу найти правильный синтаксис, чтобы сделать это быстро. Я использую SQLite.

Основная проблема заключается в том, что у меня есть таблица, первичный ключ которой (objUid, time). Он содержит столбцы objUid, time и frame. Для целей этого вопроса frame - непрозрачное значение.

Я хотел бы извлечь для каждого объекта objUid: objUid, minTime, значение кадра в minTime, maxTime, значение кадра в maxTime.

... и я бы хотел сделать это как можно быстрее.

У меня есть это прямо сейчас, и это работает, но если я уберу операторы "NATURAL JOIN" (что означает, что я не получаю столбец "frame"), все будет примерно вдвое быстрее.

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 Ответ

2 голосов
/ 25 февраля 2010

Использование:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...