我有一个棘手的问题,我正试图找到最有效的方法来解决。
这是我的视图结构的简化版本。
表:审计
审计ID | 出版物ID | 审计结束日期 | 审计开始日期 1 | 3 | 13/05/2010 | 2010 年 1 月 1 日 2 | 1 | 2009 年 12 月 31 日 | 2009 年 1 月 10 日 3 | 3 | 2010 年 3 月 31 日 | 2010 年 1 月 1 日 4 | 3 | 2009 年 12 月 31 日 | 2009 年 1 月 10 日 5 | 2 | 2010 年 3 月 31 日 | 2010 年 1 月 1 日 6 | 2 | 2009 年 12 月 31 日 | 2009 年 1 月 10 日 7 | 1 | 2009 年 9 月 30 日 | 2009 年 1 月 1 日
我需要 3 个查询。我需要一个来获取所有数据。接下来只获取历史数据(即除AuditEndDate最新数据项之外的所有数据),然后最后一个查询是获取最新数据项(通过AuditEndDate)。
我有一个日期限制(这是基于每个用户/组),其中某些用户组只能在某些日期之间看到,这增加了一层复杂性。您会在 where 子句中注意到这一点,即 AuditEndDate<=blah 和 AuditStartDate>=blah
Foreach 发布,选择所有可用的数据。
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 只返回所有数据而不是限制。
谁能帮我?
谢谢
杰森