J'ai un tableau avec la liste des codes de cycle.CYCLE_DEFINITION. chaque cycle_code a 12 mois d'entrées dans une autre table (PM1_CYCLE_STATE). Chaque mois a un cycle_start_date et un cycle_close_date. Je vais vérifier avec une date particulière (disons sysdate) et vérifier quel est le mois en cours de chaque cycle.additionally je vais aussi obtenir la liste des futurs 3 mois de ce cycle particulier.SQL requête - besoin de quelques suggestions
la requête que j'ai écrit est comme ci-dessous:
SELECT cycd,cm,sd,ed,ld FROM (SELECT pcs.cycle_code CYCD,LTRIM(pcs.cycle_month,'0')+0 CM, pcs.cycle_start_date SD,pcs.cycle_close_date ED,ld.logical_date LD FROM pm1_cycle_state pcs,logical_date ld WHERE
ld.logical_date BETWEEN pcs.cycle_start_date AND pcs.cycle_close_date and ld.logical_date_type='B')
UNION
SELECT cycd,cm,sd,ed,ld FROM (SELECT pcs.cycle_code CYCD,DECODE(LTRIM(pcs.cycle_month,'0')+1,13,1,14,2,15,3,LTRIM(pcs.cycle_month,'0')+1) CM ,pcs.cycle_start_date SD,pcs.cycle_close_date ED,ld.logical_date LD FROM pm1_cycle_state pcs,logical_date ld WHERE
ld.logical_date BETWEEN pcs.cycle_start_date AND pcs.cycle_close_date and ld.logical_date_type='B')
UNION
SELECT cycd,cm,sd,ed,ld FROM (SELECT pcs.cycle_code CYCD,DECODE(LTRIM(pcs.cycle_month,'0')+2,13,1,14,2,15,3,LTRIM(pcs.cycle_month,'0')+2) CM ,pcs.cycle_start_date SD,pcs.cycle_close_date ED,ld.logical_date LD FROM pm1_cycle_state pcs,logical_date ld WHERE
ld.logical_date BETWEEN pcs.cycle_start_date AND pcs.cycle_close_date and ld.logical_date_type='B')
UNION
SELECT cycd,cm,sd,ed,ld FROM (SELECT pcs.cycle_code CYCD,DECODE(LTRIM(pcs.cycle_month,'0')+3,13,1,14,2,15,3,LTRIM(pcs.cycle_month,'0')+3) CM ,pcs.cycle_start_date SD,pcs.cycle_close_date ED,ld.logical_date LD FROM pm1_cycle_state pcs,logical_date ld WHERE
ld.logical_date BETWEEN pcs.cycle_start_date AND pcs.cycle_close_date and ld.logical_date_type='B')
Cette requête est en cours d'exécution parfaitement bien. Cela se traduira par tous les cycles_codes avec exactement 4 lignes pour le mois en cours et les 3 prochains mois.
Maintenant, l'exigence est de savoir s'il manque un mois. Comment pourrais-je le montrer? pour exemple: la sortie de la requête ci-dessus est
cycd cm
102 1
102 10
102 11
102 12
103 1
103 10
103 11
103 12
104 1
104 10
104 11
104 12
Maintenant, supposons que la ligne avec cycd = 104 et cm = 11 ne figure pas dans le tableau, la requête ci-dessus ne sera pas obtenir la ligne 104 11
. Je souhaite afficher uniquement ces lignes. comment pourrais-je le faire?
Vous auriez besoin d'une jointure gauche gauche http://dev.mysql.com/doc/refman/5.0/en/join.html – Konerak