Certaines personnes aiment vivre dangereusement et scrutent des données à intervalles réguliers. Disons que toutes les dix minutes, on regarde sur les dix minutes précédentes mais que l'heure d'éxécution ne se passe pas pile sur l'intervalle.
Si le premier passage à lieu à 9:00:00, le second peut avoir lieu à 9:12:15, et le soixantième à 19:05:00, ce qui fait louper une partie de la fenêtre temporelle.
Voici une requete qui à 9:00:00 renvoie 9:00:00, à 9:12:15 renvoie 9:10:00 et à 19:05:00 renvoie 19:00:00.
Celle-ci est paramétrable en créant un table TABLE_PARAMETRE, ayant un champ INTERVALLE (number) contenant le nombre de minutes entre deux scrutations.
| Code : |
SELECT to_char(heureRecup,'YYYY-MM-DD HH24:')||lpad(to_char(extract( minute from heureRecup ) - mod (
case when extract( minute from heureRecup ) (inférieur) to_number( INTERVALLE) then
extract( minute from heureRecup ) + to_number(INTERVALLE)
else
extract( minute from heureRecup )
end ,
to_number( INTERVALLE ))),2,'0')||':00 +01:00'
from (
SELECT INTERVALLE, to_timestamp(to_char(systimestamp - (to_number(INTERVALLE)/1440),'DD-MM-YYYY HH24:MI:«»SS'),'DD-MM-YYYY HH24:MI:«»SS') as heureRecup FROM TABLE_PARAMETRES
)
|