Присоединиться к первой действительной строке из другой таблицы в innodb - PullRequest
0 голосов
/ 17 марта 2011

У меня есть 2 таблицы, одна из которых содержит записи с некоторыми связанными с ней данными, а другая - исторические данные для первой таблицы.

В исторической таблице может быть много строк для каждой строки в основной таблице. Я хочу присоединиться к самой новой записи из исторической таблицы при извлечении одной или нескольких из основной таблицы.

Я пытался присоединиться к подзапросу, используя группу по идентификатору, который не работал, я не могу использовать ограничение, потому что хочу выбрать более одной записи.

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Предполагая, что историческая таблица имеет PK, состоящий из исходного идентификатора и метки времени

SELECT table.*, ht1.*
FROM table INNER JOIN historical_table ht1
     ON table.id = ht1.id
     LEFT JOIN historical table ht2
     ON ht1.id = ht2.id AND ht1.timestamp < ht2.timestamp
WHERE ht2.timestamp IS NULL

Основная часть логики - это строки выбора, для которых нет новых записей (ht2.timestamp равен нулю)

Это общий показатель для каждой группы, поэтому вопрос (и есть другие способы решения этой проблемы)

1 голос
/ 17 марта 2011

Один из способов сделать это:

select record.id
(select history.id from history where history.record_id = record.id order by history.id desc limit 1) as history_id
from record

Если вам нужны полные запросы, вы можете просто использовать идентификаторы из этого запроса как подзапрос. Много других способов сделать это тоже: -)

...