У меня есть сложная проблема, что я пытаюсь найти наиболее эффективный метод для решения.Как найти последнюю строку для каждой группы данных
Вот упрощенная версия структуры View.
Таблица: Ревизии
AuditID | PublicationID | AuditEndDate | AuditStartDate 1 | 3 | 13/05/2010 | 01/01/2010 2 | 1 | 31/12/2009 | 01/10/2009 3 | 3 | 31/03/2010 | 01/01/2010 4 | 3 | 31/12/2009 | 01/10/2009 5 | 2 | 31/03/2010 | 01/01/2010 6 | 2 | 31/12/2009 | 01/10/2009 7 | 1 | 30/09/2009 | 01/01/2009
Там в 3 запроса Вот что мне нужно от этого. Мне нужно, чтобы все данные были получены. Следующий, чтобы получить только данные истории (то есть все, кроме исключения последнего элемента данных AuditEndDate), а затем последний запрос - получить последний элемент данных (через AuditEndDate).
Есть еще один уровень сложности, который у меня есть ограничение по дате (это для каждого пользователя/группы), где определенные группы пользователей могут видеть только определенные даты. Вы заметите это в предложении where как AuditEndDate < = blah и AuditStartDate> = blah
Перед публикацией выберите все доступные данные.
select * from Audits
Where auditEndDate<='31/03/10' and AuditStartDate>='06/06/2009';
Foreach публикации, выберите все данные, но Исключить последние доступные данные (по AuditEndDate)
select * from Audits
left join
(select AuditId as aid, publicationID as pid
and max(auditEndDate) as pend
from Audit where auditenddate <= '31/03/2009' /* user restrict */
group by pid) Ax
on Ax.pid=Audit.pubid
where pend!=Audits.auditenddate
AND auditEndDate<='31/03/10'
and AuditStartDate>='06/06/2009' /* user restrict */
Foreach публикации, выберите только самые последние доступные данные (по AuditEndDate)
select * from Audits
left join
(select AuditId as aid, publicationID as pid
and max(auditEndDate) as pend
from Audit where auditenddate <= '31/03/2009'/* user restrict */
group by pid) Ax
on Ax.pid=Audit.pubid
where pend=Audits.auditenddate
AND auditEndDate<='31/03/10'
and AuditStartDate>='06/06/2009' /* user restrict */
Итак, на данный момент запросы 1 и 3 работают нормально, но запрос 2 просто возвращает все данные вместо ограничения.
Может ли кто-нибудь мне помочь?
Благодаря
джейсон