bonjour j'ai un petit soucis avec une requete sous oracle, je vous explique le probleme:
j'ai trois tables de la forme:
-- TABLE SALARIE:
CREATE TABLE SPADMIN.SALARIE(
MATRICULE INTEGER,
STATACTIVITE VARCHAR2(60),
CIVILITE VARCHAR2(60),
NOM VARCHAR2(60),
PRENOM VARCHAR2(60),
CONSTRAINT SALARIE_PK PRIMARY KEY(MATRICULE)
);
-- TABLE ENFANT
CREATE TABLE SPADMIN.ENFANT(
MATRICULE INTEGER,
NOMENFANT VARCHAR2(60) ,
PRENOMENFANT VARCHAR2(60),
NUMENFANT INTEGER,
DATENAISSANCE DATE,
DATEFINENREG DATE,
CONSTRAINT ENFANT_PK PRIMARY KEY(MATRICULE,NUMENFANT),
CONSTRAINT ENFANT_MATRICULE FOREIGN KEY(MATRICULE) REFERENCES SALARIE(MATRICULE)
);
-- TABLE AFFECTATION
CREATE TABLE SPADMIN.AFFECTATION(
MATRICULE INTEGER,
DATEDEBAFF DATE,
DATEFINAFF DATE,
DATEDEBCHANGEMENT DATE,
IDDOMAINEPERSONNEL VARCHAR2(6),
CONSTRAINT AFFECTATION_PK PRIMARY KEY(MATRICULE,DATEDEBAFF,DATEDEBCHANGEMENT),
CONSTRAINT AFFECTATION_MATRICULE FOREIGN KEY(MATRICULE) REFERENCES SALARIE(MATRICULE),
CONSTRAINT AFFECTATION_DOM FOREIGN KEY(IDDOMAINEPERSONNEL) REFERENCES DOMAINEPERSONNEL(IDDOMAINEPERSONNEL)
);
et donc dans ma requete je voudrais avoir:
Je voudrais pouvoir compter le nombre d'enfant par année de naissance compris entre 1978 et 2005 et que leur date de déces soit egale a 31/12/9999 Par contre je voudrais faire un autre test dans cette requete c'est qu'en plus de ca je ramene que les enfants dont le parent(table salarie) ait une affectation(table affectation) dont le iddomainepersonnel soit egal a 2129 et que leur date affectation soit la plus grande.
j'ai fait une esquisse comme ca mais ca ne fonctionne pas.
pourriez vous m'aider
ou faire une requete pas a pas du genre
en premier je selcetionne tous les parents qui a la date d'affectation la plus grande ont un iddomainepersonnel = 2129
qu'ensuite je selectionne tous les enfant dont la date de naissance est compris entre 1978 et 2005 et que leur date de datefinenreg soit différente de 31/12/9999
et que seulement apres je selectionne tous les enfants avec ces criteres dont les parents correspondent (criteres d'avant)
merci de votre aide a tous!
esquisse de ma requete:
select to_char(E.datenaissance,'yyyy') as annee, count(E.matricule) from enfant E, Salarie S, Affectation A where S.matricule = A.matricule and A.iddomainePersonnel ='2129' and S.matricule = E.matricule and to_char(E.datenaissance,'yyyy') <= 2003 and to_char(E.datenaissance,'yyyy') >= 1977 and TO_CHAR(E.datefinenreg,'dd/mm/yyyy') = '31/12/9999'
and A.DateDebChangement = (SELECT MAX(A2.DateDebChangement) FROM Affectation A2 WHERE A.matricule=A2.matricule)
group by to_char(E.datenaissance,'yyyy');