J'ai un problème délicat que j'essaie de trouver la méthode la plus efficace à résoudre.Comment trouver la dernière ligne pour chaque groupe de données
Voici une version simplifiée de ma structure View.
Tableau: Vérifications
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
Il y a 3 requête est que j'ai besoin de cela. J'ai besoin d'un pour obtenir toutes les données. Le suivant pour obtenir uniquement les données d'historique (c'est-à-dire tout sauf exclure le dernier élément de données par AuditEndDate) et la dernière requête est d'obtenir le dernier élément de données (par AuditEndDate).
Il y a une couche supplémentaire de complexité que j'ai une restriction de date (c'est sur une base par utilisateur/groupe) où certains groupes d'utilisateurs peuvent seulement voir entre certaines dates. Vous remarquerez cela dans la clause where comme AuditEndDate < = blah et AuditStartDate> = blah
Pour chaque publication, sélectionnez toutes les données disponibles.
select * from Audits
Where auditEndDate<='31/03/10' and AuditStartDate>='06/06/2009';
publication Foreach, sélectionnez toutes les données, mais excluent les dernières données disponibles (par 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 */
publication Foreach, sélectionnez uniquement les dernières données disponibles (par 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 */
Pour l'instant, les requêtes 1 et 3 fonctionnent correctement, mais la requête 2 renvoie simplement toutes les données au lieu de la restriction.
Quelqu'un peut-il m'aider?
Merci
jason