Compte tenu trois tables dates (Date ADate, booléen Douse), Jours (rangeId int, jour int, qté int) et la plage (rangeId int, date startDate) dans Oracleefficace se joindre à une "corrélation" des sous-requêtes
I voulez les joindre de sorte que Range soit joint aux dates de aDate = startDate où doUse = 1 avec chaque jour dans Days.
Si une seule gamme, il peut être fait quelque chose comme ça
SELECT rangeId, aDate, CASE WHEN doUse = 1 THEN qty ELSE 0 END AS qty
FROM (
SELECT aDate, doUse, SUM(doUse) OVER (ORDER BY aDate) day
FROM Dates
WHERE aDate >= :startDAte
) INNER JOIN (
SELECT rangeId, day,qty
FROM Days
WHERE rangeId = :rangeId
) USING (day)
ORDER BY day ASC
Ce que je veux faire est de requête pour toutes les gammes de gamme, pas seulement un.
Le problème est que la valeur de jointure "jour" dépend de la plage startDate à calculer, ce qui me pose des problèmes dans la formulation d'une requête. Gardez à l'esprit que la table Dates est assez volumineuse, donc je voudrais éviter de calculer la valeur du jour à partir de la première date de la table, alors que chaque Range Days ne devrait pas dépasser 100 jours environ.
Modifier: Exemple de données
Dates Days
aDate doUse rangeId day qty
2008-01-01 1 1 1 1
2008-01-02 1 1 2 10
2008-01-03 0 1 3 8
2008-01-04 1 2 1 2
2008-01-05 1 2 2 5
Ranges
rangeId startDate
1 2008-01-02
2 2008-01-03
Result
rangeId aDate qty
1 2008-01-02 1
1 2008-01-03 0
1 2008-01-04 10
1 2008-01-05 8
2 2008-01-03 0
2 2008-01-04 2
2 2008-01-05 5
Pourriez-vous s'il vous plaît remplir des exemples de données et que souhaitez-vous obtenir en conséquence? – Quassnoi