Bonjour,
Je viens de constater un effet très bizarre sur une requête dans l'environnement de mon client.
En effet, il semblerait que HFSQL exécute d'abord la clause TOP (ou LIMIT) puis ORDER BY, ce qui n'est pas le résultat voulu et qui, j'ai bien vérifié, ne correspond pas au standard SQL.
C'est bien l'inverse qui est censé se produire ?
Voici une illustration avec quelques requêtes :
SELECT CRENEAU.DATE, CRENEAU.HEURE
FROM CRENEAU
WHERE CRENEAU.DATE = '20210527'
Résultat (545 enregistrements) :
27/05/2021, 08:20
27/05/2021, 16:50
27/05/2021, 08:20
27/05/2021, 16:55
[...]
27/05/2021, 16:50
27/05/2021, 08:20
27/05/2021, 16:50
Avec clause ORDER BY pour trier le résultat :
SELECT CRENEAU.DATE, CRENEAU.HEURE
FROM CRENEAU
WHERE CRENEAU.DATE = '20210527'
ORDER BY CRENEAU.DATE, CRENEAU.HEURE
27/05/2021, 07:00
27/05/2021, 07:00
27/05/2021, 07:00
27/05/2021, 07:00
27/05/2021, 07:00
27/05/2021, 07:05
27/05/2021, 07:05
27/05/2021, 07:05
[...]
27/05/2021, 17:25
27/05/2021, 17:25
27/05/2021, 17:30
27/05/2021, 17:30
27/05/2021, 17:30
27/05/2021, 17:30
27/05/2021, 17:30
Puis on extrait que les x premiers qui nous intéresse :
SELECT TOP 3 CRENEAU.DATE, CRENEAU.HEURE
FROM CRENEAU
WHERE CRENEAU.DATE = '20210527'
ORDER BY CRENEAU.DATE, CRENEAU.HEURE
Résultat attendu :
27/05/2021, 07:00
27/05/2021, 07:00
27/05/2021, 07:00
Résultat obtenu (idem avec LIMIT) :
27/05/2021, 08:20
27/05/2021, 08:20
27/05/2021, 16:50
J'ai essayé de faire une sous-requête avec la partie ORDER BY mais visiblement HFSQL ne sait pas gérer cette syntaxe.
Avez-vous des solutions ? Selon moi, je pense ne pas avoir le choix que de parcourir manuellement mes x enregistrements, mais c'est dommage et cela peut impacter les performances en cas de nombreux horaires pour un jour donné.
Merci de vos réponse.
Cordialement,
Phendel