У меня есть хитрая проблема, которую я пытаюсь найти наиболее эффективный способ решения.
Вот упрощенная версия моей структуры 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';
Для каждой публикации выберите все данные, но исключите последние доступные данные (по 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 */
Для каждой публикации выберите только самые последние доступные данные (по 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 просто возвращает все данные вместо ограничения.
Кто-нибудь может мне помочь?
Спасибо
1028 * Ясон *