解決するのに最も効果的な方法を見つけようとしているというトリッキーな問題があります。
これが私のビュー構造の簡略化されたバージョンです。
表:監査
AuditID | PublicationID | AuditEndDate | AuditStartDate 1 | 3 | 2010年5月13日| 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つあります。すべてのデータを取得するには、1つにする必要があります。次に、履歴データ(つまり、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は制限ではなくすべてのデータを返すだけです。
誰か助けてもらえますか?
ありがとう
ジェイソン