SQL получает последние уникальные строки - PullRequest
1 голос
/ 24 апреля 2010

У меня есть таблица журнала, каждая строка представляет объект, регистрирующий его состояние. Каждый объект имеет уникальный неизменный GUID. Есть несколько объектов, регистрирующих свои состояния, поэтому будут тысячи записей, причем объекты постоянно вставляют новые журналы. Каждый раз, когда объект регистрируется, это происходит через INSERT.

У меня есть столбцы PrimaryKey, GUID, ObjectState и LogDate в tblObjects. Я хочу выбрать самую последнюю (по дате и времени) запись в журнале для каждого уникального GUID из tblObjects, по сути, «снимок» всех объектов.

Как это можно сделать?

Ответы [ 2 ]

3 голосов
/ 24 апреля 2010

Вы можете использовать подзапрос для фильтрации последних записей журнала:

select t1.*
from tblObjects t1
where t1.LogDate = (
    select max(LogDate) 
    from tblObjects t2
    where t1.guid = t2.guid
)

Или, альтернативно, не существует:

select t1.*
from tblObjects t1
where not exists (
    select *
    from tblObjects t2
    where t1.guid = t2.guid
    and t1.LogDate < t2.LogDate
)

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

0 голосов
/ 24 апреля 2010

Похоже, вы хотите выбрать самую последнюю LogDate для каждого отдельного GUID. Использование «group by» с функцией max должно делать то, что вам нужно:

Select *, max(LogDate)
From tblObjects
Group By GUID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...