Hola,
Posiblemente se pueda llegar a conformar una frase en "open SQL" empleando SELECT para que en una sola frase se obtenga todo el efecto requerido (filtrado por condición y acumulación en cambio del valor de una parte del campo de fecha).
Mi experiencia es que las frases open SQL complejas pueden resultar muy ineficientes. Imagino que el pseudo-compilador que traduce de open SQL al SQL real de la base de datos (Oracle, MySQL, Informix o la que se esté empleando) no necesariamente produce el código SQL real mas eficiente. Resulta mejor no ponerle las cosas tan dificiles al traductor y darle varias frases mas claras y menos ambiciosas.
Como ejemplo, una frase con join de varias tablas (una de las cuales tiene mas de un millón de registros) estaba llevando a que el programa que la empleaba durara mas de 3 dias continuos (pasó de 80 horas sin terminar). Cuando dividimos la frase en varias frases equivalentes llevamos el tiempo a 10 o 12 horas.
Supongo que es como muchas cosas en la vida:
El que mucho abarca, poco aprieta