SQLite - выбрать самую новую строку с определенным значением поля - PullRequest
1 голос
/ 18 июня 2011

У меня вопрос SQLite, который сводится к следующей проблеме.

id | key | data
1  |   A |  x
2  |   A |  x
3  |   B |  x
4  |   B |  x
5  |   A |  x
6  |   A |  x

Новые данные добавляются в конец таблицы с автоматически увеличивающимся идентификатором.

Теперь я хочу создать запрос, который возвращает последнюю строку для каждого ключа, например:

id | key | data
4  |   B |  x
6  |   A |  x

Я пробовал несколько разных запросов, но безуспешно. Как выбрать только самые последние строки для каждого значения ключа в таблице?

Ответы [ 4 ]

4 голосов
/ 18 июня 2011

используйте этот SQL-запрос:

select * from tbl where id in (select max(id) from tbl group by key);
0 голосов
/ 07 ноября 2011

Без вложенных SELECT или JOIN, но только если поле, определяющее "самый новый", является первичным ключом (например, автоинкремент):

  SELECT * FROM table GROUP BY key DESC;
0 голосов
/ 18 июня 2011

Вы можете разделить основную задачу на две подпрограммы.

Вы можете двигаться с подходом, сначала получить все значения id / key , а затем получить id дляпоследнее значение ключей A и B,

Теперь вы можете легко написать запрос, чтобы получить последнее значение для A и B, поскольку у вас есть значение id для дляклавиши A и B.

0 голосов
/ 18 июня 2011
SELECT *
FROM mytable
    JOIN 
        ( SELECT MAX(id) AS maxid
          FROM mytable
          GROUP BY "key"
        ) AS grp
      ON grp.maxid = mytable.id

Примечание: лучше не использовать зарезервированные слова, такие как key, в качестве идентификаторов (для таблиц, полей и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...