(Ceci est la version DB2 9.5)Est-ce faisable avec SQL simple? Ou est-ce qu'une procédure est requise?
Dire que j'ai une table avec quatre colonnes:
C1: [EmployeeId]
C2: [StartDate] yyyy-mm-dd format
C3: [EndDate] yyyy-mm-dd format
C4: [Age]
La combinaison [EmployeeId + StartDate] constitue la clé primaire.
Considérons maintenant les rangées d'exemples suivants:
1 2010-01-16 2010-04-16 29
2 2010-02-16 2010-03-16 33
3 2010-05-16 2010-05-16 31
Il y a une garantie que tous les jours sera le 16e jour, à travers toutes les dates, à travers toutes les lignes. Aucun autre moyen à ce sujet.
Je suis en train d'écrire une requête qui procédez comme suit:
Pour toute ligne où le mois de départ est inférieur au mois de fin (comme la ligne 1), répliquent la ligne pour chaque mois entre , y compris la dernière rangée. Donc, après l'exécution de la requête, les nouvelles lignes de la ligne 1 seront:
1 2010-01-16 2010-04-16 29
1 2010-02-16 2010-04-16 29
1 2010-03-16 2010-04-16 29
1 2010-04-16 2010-04-16 29
Pour les lignes où le mois de début et le mois de fin sont les mêmes, ne font rien. Pour les lignes où le mois de fin est le mois juste après le mois de départ, une nouvelle ligne sera insérée (voir la dernière ligne ci-dessus pour comprendre pourquoi).
Questions:
- Est-ce possible en SQL? Ou est-ce que des procédures sont requises?
- Si oui, alors comment? (astuces, code, quoi que ce soit)
Merci d'avoir lu les gars. L'énoncé du problème est complexe, j'espère que j'ai fait un bon travail pour l'expliquer. Toute ambiguïté ou incohérence: veuillez le signaler et je l'éditerai dès que possible.
La plus grande préoccupation que je vois n'a rien à voir avec le SQL, mais avec la garantie que les jours seront le 16e jour. L'expérience me dit que cela va changer dès que le temps aura passé où vous ne comprenez pas pourquoi vous l'avez codé de cette façon pour commencer. –