Метка времени MySQL и GROUP BY с двумя таблицами - PullRequest
2 голосов
/ 08 марта 2010

У меня есть таблица с 3 полями:

  • ID (не уникальный, не первичный ключ)
  • timestamp
  • marker

Я хочу получить последнюю запись для каждого отдельного ID, но когда я это сделаю
SELECT ID, max(timestamp) from table GROUP BY ID
поле маркера будет неправильным.

У меня есть другая таблица со следующими полями:

  • ID (уникальный первичный ключ)
  • lat
  • lng

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

Может ли кто-нибудь указать мне правильное направление? Большое спасибо.

1 Ответ

2 голосов
/ 08 марта 2010

Наличие столбца ID, который не является уникальным, звучит «неожиданно», но этот должен получить ожидаемые строки:

SELECT t.id, t.timestamp, MAX( t.marker ) marker,
       t2.lat, t2.lng
FROM table t
JOIN (
    SELECT id, MAX(timestamp) ts
    FROM table
    GROUP BY id
) tx ON ( tx.id = t.id AND tx.ts = t.timestamp )
JOIN t2 ON ( t2.id = tx.id )
GROUP BY t.id, t.timestamp

Вторая группа гарантирует, что вы получите только одну строку, если есть еще записи для тех же id и timestamp.

Обновление : отредактированный запрос на присоединение t2.

Используйте LEFT JOIN, если в t1 есть id s, которых нет в t2. lat и lng будут тогда NULL для этих строк.

...