Bonsoir @ElCatala
Pourquoi ne pas classer la table résultat selon le champ Date par ordre descendant et limiter la liste de résultat à 10 items par LIMIT comme ceci :
votre requête sauf la partie DATEDIFF()<10
ORDER BY Date DESC
LIMIT 10
Ajout suite à réponse
LIMIT 10 limite la liste de résultat à 10 items au maximum, quelque soit leur date. C’est ce que j’avais cru comprendre de votre demande
je souhaite extraire les 10 dernières données
Il n’existe pas de fonction MAXDATE. Pour obtenir la date la plus grande d’une série, il faut créer une table qui ne contient que l’agrégat MAX(“Date”). Pour cela :
LEFT OUTER JOIN (SELECT MAX("Date") AS "Maxdate" FROM "T_TiitreValeur") AS "TMaxdate"
Ensuite, vous pouvez créer une table de 20 titres dont des valeurs auront été enregistrées dans la période de 10 jours au plus avant “Maxdate” par un
LEFT OUTER JOIN (SELECT Titre FROM "T_TiitreValeur" where DATEDIFF( 'dd', "T_TiitreValeur"."Date", "TMaxdate"."Maxdate" ) < 10 LIMIT 20) AS "TDerniersTitresChanges"
Le problème de LIMIT est que son résultat est imprévisible : Vous en aurez 20 mais vous ne saurez pas prédire lesquels s’il se trouve que plus de 20 ont vu leurs valeurs modifiées durant les 10 derniers jours.
Enfin, vous pouvez utiliser la liste des titres de la table “TDernierTitresChanges” à la place de ceux de la table “T_Titre” : cela vous limitera les résultats des valeurs à celles des 20 titres concernées et en limitant “Date” aux 10 derniers jours, par DATEDIFF( ‘dd’, “T_TiitreValeur”.“Date”, “TMaxdate”.“Maxdate” ) < 10 vous limiterez à nous les valeurs concernées.
Cela pourra laisser des trous si tous les 20 titres concernés n’ont pas de valeurs pour chacun des 10 derniers jours et en particulier si une journée de cotation n’a pas été enregistrée. Mais vous avez les principes : diviser pour régner ! Créer “simplement” une table pour chaque contrainte et utiliser ces composants par la suite dans la requête principale.
Sans avoir la base sous la main, il est difficile de produire des indications plus précises. Mais je suis certain de votre proche succès. Dites-nous quand !
Pour montrer à la communauté que la question a trouvé sa réponse, cliquez sur ✓ à côté de la “bonne” réponse, et “votez” en cliquant sur la flèche ^ de toute réponse utile. Ce sont les mécanismes utilisés pour communiquer la qualité des questions et réponses sur ce site. Merci!
Pour tout complément d’information, utilisez les boutons situés en dessous de votre question et éditez
votre question ou simplement ajouter un commentaire
. SVP ! Ne répondez pas à votre propre question à moins d’y apporter une réelle réponse.
Cordialement, Michel