Résultat requête SQL pas satisfaisant
8-) Bonjour aux Boss du SQL,
Sur la requête suivante, j'obtiens le résultat qui ne satisfait pas :
Code:
1 2 3 4 5 6 7 8 9 10
| SELECT DATSOR, MOIS, JOUR, JORD, NATJOUR
FROM LCO_CALENDRIER
WHERE
JORD IN
(SELECT MAX(JORD) FROM LCO_CALENDRIER
WHERE NATJOUR = 1 AND JORD <=
(SELECT JORD
FROM LCO_CALENDRIER
WHERE DATSOR = '20141003') -2
); |
DATSOR MOIS JOUR JORD NATJOUR
-----------------------------------------------
20111001 10 1 274 2
20120930 9 30 274 2
20131001 10 1 274 1
20141001 10 1 274 1 <== enregistrement unique souhaité
20151001 10 1 274 1
Je souhaite obtenir l'enregistrement unique dans la table CALENDRIER avec en date
de traitement '20141003' ayant un NATJOUR = 1 (jour ouvré) à - 2 jour.
Le résultat me ramène 5 Rows, et j'aimerai trouvé uniquement une seule ligne,
soit celle à la date 'DATSOR ou date de traitement) = à 20141001 avec la
NATJOUR (1= jour ouvré, 2= jour férié) ) soit celui précisé avec '<==='.
Auriez vous une solution à me proposer ?
Merci d'avance
HULK77
Résultat Requête pas satisfaisant, maintenant, c'est OK
8-) Bonjour McM,
Merci pour cette info, j'ai effectivement ajouté un filtre sur l'année et le mois que je connais de part la date de traitement (dans mon cas = 201410), avec '1' dans le champ NATJOUR (soit les jours ouvrés)
ce qui me réduit le résultat à 3 ou 4 éléments.
Pas encore satisfaisant.
J'y ai donc rajouté une restriction ROWNUM=1 afin d'obtenir un seul élément en sortie qui est trié en Desc, ci qui me ramène un ROW le plus proche de ma date voulue.
Pour info cette date est déclarée en type CHAR 8 byte, null par default)
Voici ce que cela donne en requête :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| EXEC SQL
SELECT DATSOR, ANNEE, MOIS, JOUR, NATJOUR
INTO :CO010-DATSOR ,
:CO010-ANNEE ,
:CO010-MOIS ,
:CO010-JOUR ,
:CO010-NATJOUR
FROM (
SELECT DATSOR, ANNEE, MOIS, JOUR, NATJOUR
FROM LCO_CALENDRIER
WHERE
ANNEE = :W-SSAA AND
MOIS = :W-MOIS AND
NATJOUR = '1' AND
DATSOR <= :W-DATE48H
ORDER BY DATSOR DESC
)
WHERE ROWNUM =1
END-EXEC. |
Merci en tout cas, c'est OK pour moi.
HULK77
Ma fabrique de chemise tourne à plein régime
Citation:
Envoyé par
McM
Après analyse plus poussée, la restriction sur l'année n'est pas valable pour le début de l'année.
Voici une requête correcte.
Enfin tout dépend comment est défini la colonne datsor : Date ? Varchar2 ? Number ?
La requête suivante considère que datsor (vu ton code), est en VARCHAR2
Code:
1 2 3 4 5 6 7 8 9
| SELECT
MAX(DATSOR) KEEP (DENSE_RANK FIRST ORDER BY datesor desc) datsor,
MAX(MOIS) KEEP (DENSE_RANK FIRST ORDER BY datesor desc) mois,
MAX(JOUR) KEEP (DENSE_RANK FIRST ORDER BY datesor desc) jour,
MAX(JORD) KEEP (DENSE_RANK FIRST ORDER BY datesor desc) jord,
MAX(NATJOUR) KEEP (DENSE_RANK FIRST ORDER BY datesor desc) natjour
FROM LCO_CALENDRIER
WHERE NATJOUR = 1
AND datsor <= TO_CHAR(TO_DATE('03/10/2014','DD/MM/RRRR') - 2, 'RRRRMMDD') |
Complément d'info sur résultat requete pas satisfaisant
8-) Bonjour McM,
Effectivement, j'ai constaté que sur quand je tombe sur les 3 premiers jours du mois et en plus le cas d'un WE en début de mois, je ne trouve rien en résultat de ma requête.
Je suis obligé donc de traiter ses quelques cas en manuel en recalculant la date (-1 mois, et + ou - 1 ou 2 jours sur les derniers jours du nouveau mois (-1), ensuite, je refais la requête
qui me ramène mon occurrence, qui est la date voulue.
J'avais oublié de préciser ce fait pour la bonne compréhension du problème par tous.
Merci de ton regard.
Cordialement
HULK77
Ma fabrique de chemise tourne à plein régime
Complément info sur résultat requête pas satisfaisant
8-) Bjr McM,
N'étant plus sur site, je ne pourrai pas.
Néanmoins, j'ai une copie de la base, et je testerai la requête dès que j'aurai résolu mon problème de connexion(Erreur E/S) suite à mon
installation de Sql Developer sur mon PC (première fois).
J'importerai les copies des tables, afin de faire les tests.
Merci
Cordialement
HULK77
Ma fabrique de chemise tourne à plein régime
Citation:
Envoyé par
McM
Euh, ma seconde requête avec le dense_rank doit être juste. Pourquoi tu ne l'utilises pas ?