cegtio a écrit : ↑11 juin 2023 16:58
cela génère un temps de calcul énorme
Je pense que le problème est votre formule de calcul de l'âge. Essayez de calculer le nombre de jours entre la date et aujourd'hui par VOUS-MÊME, puis divisez par 365,25. Je me demande à quelle vitesse tu peux le faire.
Je suggère d'utiliser une autre façon de calculer l'âge, par exemple en utilisant la fonction : DATEDIFF('year', "DATE_BIRTH_CLIENT", CURRENT_DATE)... ou YEAR(CURRENT_DATE) - YEAR("DATE_BIRTH_CLIENT") ... voir si cela expression génère une énorme quantité de calculs de temps.
cegtio a écrit : ↑10 juin 2023 19:45
je souhaite réaliser une succession de trois requêtes UPDATE au démarrage de ma base de données. Comment-puis je faire ?
Malheureusement, uniquement avec une macro ou en tapant vous-même la commande SQL.
EDIT:
J'ai testé, dans votre base de données "interface patients.obd" ajouté 1050 enregistrements à la table "CUSTOMERS" et exécuté la requête :
Code : Tout sélectionner
SELECT "PRENOM", "NOM", "EMAIL", "DATE_NAISSANCE",
CASE WHEN FLOOR( DATEDIFF( 'dd', "CLIENTS"."DATE_NAISSANCE", CURDATE( ) ) / 365.25 ) < 13 THEN 'Enfant'
WHEN FLOOR( DATEDIFF( 'dd', "CLIENTS"."DATE_NAISSANCE", CURDATE( ) ) / 365.25 ) BETWEEN 13 AND 17 THEN 'Ado'
WHEN FLOOR( DATEDIFF( 'dd', "CLIENTS"."DATE_NAISSANCE", CURDATE( ) ) / 365.25 ) > 17 THEN 'Adulte'
ELSE 'NULL' END AS "CAT_AGE"
FROM "CLIENTS"
J'ai dû attendre environ 60 secondes pour le résultat.
J'ai modifié cette requête sous la forme:
Code : Tout sélectionner
SELECT "PRENOM", "NOM", "EMAIL", "DATE_NAISSANCE",
CASE WHEN "CLIENTS"."DATE_NAISSANCE" is null THEN 'NULL'
WHEN "CLIENTS"."DATE_NAISSANCE" > CURDATE( ) THEN 'Mauvaise date'
WHEN (DATEDIFF( 'yy', "CLIENTS"."DATE_NAISSANCE", CURDATE( ) )- casewhen( RIGHT( CURDATE(), 5 ) < RIGHT( "CLIENTS"."DATE_NAISSANCE", 5 ), 1, 0 ))> 17 THEN 'Adulte'
WHEN (DATEDIFF( 'yy', "CLIENTS"."DATE_NAISSANCE", CURDATE( ) )- casewhen( RIGHT( CURDATE(), 5 ) < RIGHT( "CLIENTS"."DATE_NAISSANCE", 5 ), 1, 0 ))< 13 THEN 'Enfant'
ELSE 'Ado' END AS "CAT_AGE"
FROM "CLIENTS"
J'ai eu le résultat presque immédiatement.