Выберите несколько уникальных строк в MySQL - PullRequest
1 голос
/ 20 мая 2010

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

ID, sysid, x, y, z, время получения

ID - это уникальный номер для каждой строки.

sysid - это идентификационный номер для конкретного устройства (около 100 различных из них)

x, y и z - данные, полученные от устройства. (полностью случайные числа)

timereceived - это отметка времени, когда были получены данные.

Мне нужен запрос SQL, чтобы показать последнюю вставленную строку для устройства a, устройства b, устройства c и т. Д.

Я играл с множеством различных утверждений Select, но никогда не получал ничего, что работает. Мне удается получать уникальные строки с помощью группировки, но остальная информация случайная (или, по крайней мере, она кажется очень случайной).

Кто-нибудь может мне помочь?

В этой таблице могут быть сотни тысяч записей.

Ответы [ 3 ]

2 голосов
/ 20 мая 2010
    SELECT id, sysid, x, y, z, timereceived
      FROM tbl
INNER JOIN (  SELECT sysid, max(timereceived) as "timereceived"
                FROM tbl
            GROUP BY sysid ) most_recent
     USING (sysid, timereceived)

Это даст вам полные строки, где timereceived является самым последним за sysid.

1 голос
/ 20 мая 2010
SELECT ID, sysid, x, y, z, MAX(timereceived) as max_time FROM `table` GROUP BY sysid

ОБНОВЛЕНИЕ:

SELECT t1.ID, t1.sysid, t1.x, t1.y, t1.z, t1.timereceived 
    FROM `table` as t1
    JOIN (
      SELECT sysid, MAX(timereceived) as max_time
      FROM `table`
      GROUP BY sysid
    ) AS t2 ON (t2.sysid = t1.sysid AND t2.max_time = t1.timereceived)
1 голос
/ 20 мая 2010
SELECT sysid, MAX(timereceived) FROM yourtable GROUP BY sysid

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

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