Bonjour à tous,
Ma question porte sur une sommation conditionnelle par fenêtrage et elle est la suivante: Est il possible de remplacer la sous requête conditionnelle ci-dessous par un calcul par fenêtrage.
La requête d'origine
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 select id col1 ,(select SUM(col1) from temp b where b.LTime>=a.LTime and b.id = a.id and b.date = a.date) as NbrCol1 from temp a
La partie à modifier est donc la sous requête:
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select SUM(col1) from temp b where b.LTime>=a.LTime and b.id = a.id and b.date = a.date) as NbrCol1
Par un code du genre
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part sum (case when LTime>=LTime then b.col1 else 0 end ) over (partition by id, date) as NbrCol1
Sachant qu'en l'état, la condition sur LTime est inopérante car les LTime qui doivent être comptabilisés sont ceux des enregistrements qui ont le même id et date que l'enregistrement considéré de temp a mais avec un LTime> au LTime de l'enregistrement considéré de temp a
J'avais pensé à unpour faire
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part inner join temp b on a.id = b.id and a.date = b.datemais ça paraît pas très propre car ne respectant pas la philosophie du fenêtrage et sachant que je ne connait pas les champs qui forment la clé de la table temp a
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part sum (case when b.LTime>= a.LTime then b.col1 else 0 end ) over (partition by b.id, b.date) as NbrCol1
Merci pour toute aide apportée
A+
Partager