таблица соединения mysql - выбор самой новой строки - PullRequest
3 голосов
/ 21 декабря 2010

У меня есть следующие две таблицы MySQL

Имена таблиц

NAME_ID   NAME
1         name1
2         name2
3         name3

Статус таблицы

STATUS_ID    NAME_ID     TIMESTAMP
1            1           2010-12-20 12:00
2            2           2010-12-20 10:00
3            3           2010-12-20 10:30
4            3           2010-12-20 14:00

Я хотел бы выбрать всю информацию из таблицы NAMES и добавить самый последний корреспондент TIMESTAMP столбец из таблицы STATUS

RESULT

NAME_ID NAME     TIMESTAMP
1       name1    2010-12-20 12:00
2       name2    2010-12-20 10:00
3       name3    2010-12-20 14:00

Я застрял на этом.Как мне оставить присоединение только на новой отметке времени?

Ответы [ 3 ]

2 голосов
/ 21 декабря 2010
SELECT  *
FROM    table_names tn
LEFT JOIN
        table_status ts
ON      ts.status_id = 
        (
        SELECT  status_id
        FROM    table_status tsi
        WHERE   tsi.name_id = tn.name_id
        ORDER BY
                name_id DESC, TIMESTAMP DESC, status_id DESC
        LIMIT 1
        )

Это будет правильно обрабатывать дубликаты.

Создайте индекс для table_status (name_id, timestamp, status_id), чтобы он работал быстро.

2 голосов
/ 21 декабря 2010

попробуйте этот запрос:

select n.NAME_ID ,  n.NAME , max(TIMESTAMP) as time from NAMES n left join 
STATUS s on s.NAME_ID = n.NAME_ID group by n.NAME_ID
0 голосов
/ 21 декабря 2010
SELECT
    status.*
FROM
    status
        JOIN
            (SELECT name_id, MAX(timestamp)AS latest FROM status GROUP BY name_id) AS sub 
            ON (status.name_id = sub.name_id AND status.timestamp = sub.latest);
...