0

我有一个棘手的问题,我正试图找到最有效的方法来解决。

这是我的视图结构的简化版本。


表:审计

审计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 只返回所有数据而不是限制。

谁能帮我?

谢谢

杰森

4

1 回答 1

0

好的,实际上......这些查询工作正常。这是我运行它们的条件 PHP。都好 :)

任何可以为此提出更有效方法的人,尽管我很想听听。我最初在 where 子句中使用子查询,这运行速度非常慢......从 2 秒到 50 秒......

于 2010-05-13T02:36:47.447 回答