[Résolu] Requête pour âge à différentes dates

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
René-Pierre
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 04 avr. 2009 00:57

[Résolu] Requête pour âge à différentes dates

Message par René-Pierre »

Bonjour,

J'ai construit une base de données pour les membres de notre club, qui contient une table avec les données de chaque membre. J'ai fait une requête qui permet de calculer l'âge de chaque membre pour un jour précis - j'avais trouvé comment faire sur ce forum. Voici ma requête:

Code : Tout sélectionner

SELECT "nom", "prenom", "naissance", 
CASE 
WHEN Month('2009-04-01') < month("naissance") or ( Month('2009-04-01') = Month("naissance") and day('2009-04-01')<day("naissance") )   THEN 
      CAST((year('2009-04-01') - year("naissance") -1) AS VARCHAR) || ' ans' 
ELSE
      CAST((year('2009-04-01') - year("naissance") ) AS VARCHAR) || ' ans' 
END as "age"
from "liste-membres"
Cette requête fonctionne bien, mais je dois changer la date de la formule à chaque nouvelle requête. J'ai besoin de calculer l'âge à chaque session, pour chaque examen ( 2 ou 3 examens aux 10 semaines environ), car les exigences de passage changent selon l'âge. Existe-t-il un moyen que je n'aurais pas à retaper la date 5 fois ?

Le résultat de la requête est imprimé sur des étiquettes qu'on colle sur les feuilles d'examen.

Merci de m'aider.
Dernière modification par Dans quelle étagère le 24 juil. 2009 15:15, modifié 3 fois.
Raison : Balisage ; La balise s'insère dans le premier message du fil
René-Pierre

OpenOffice 3.2, SRB 1.2
Windows XP, SP 3
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Requête pour âge à différentes dates

Message par jeanmimi »

Bonjour et bienvenue dans ce forum,
Je ne sais pas si tu as recherché dans les exemples présents dans le forum, mais tu en as qui te montrent comment, comme dans l'exemple joint.
Tu peux aussi joindre ton fichier pour faciliter l'aide à t'apporter.
Pièces jointes
Base avec calcul de l'âge.odb
(13.07 Kio) Téléchargé 411 fois
Dernière modification par jeanmimi le 04 avr. 2009 19:47, modifié 1 fois.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 210
Inscription : 02 déc. 2008 22:22
Localisation : Laval, Pays de Loire

Re: Requête pour âge à différentes dates

Message par Dominique Pautrel »

Bonjour,

D'après ce que j'en vois dans cette section :
http://wiki.services.openoffice.org/wik ... te.2FHeure

Il y aurait soit CURRENT_DATE, soit CURRENT_TIMESTAMP, ou éventuellement Now(), qui pourrait remplacer la chaine '2009-04-01', dans l'exemple, pour se référer toujours à "Aujourd'hui".
jeanmimi a écrit :Tu peux aussi joindre ton fichier pour faciliter l'aide à t'apporter.
Si ces idées ne conviennent pas, bien sur c'est la bonne démarche...
OpenOffice.org 3.2 sous Debian Squeeze/Sid et OpenOffice.org 3.2 sous Windows XP SP3.
Le logiciel libre représente selon moi une grande famille où l'union fait la force ...
Battons les escrocs à leur petit jeu
René-Pierre
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 04 avr. 2009 00:57

Re: Requête pour âge à différentes dates

Message par René-Pierre »

Bonjour,

Merci d'avoir répondu si rapidement.

Le fichier joint par Jeanmimi ressemble beaucoup à la base que j'ai utilisée à l'automne pour construire ma propre base. La requête age (la première) est celle que j'utilisais au début pour calculer l'âge des membres. Puis je l'ai modifée pour me faciliter la vie.

Ce que je dois faire, c'est obtenir l'âge des membres à des dates fixes. Par exemple, cette semaine, c'est la période d'inscription du club. Après, je dois fournir à la commission régionale une liste des membres actifs avec leur âge au 1 janvier 2009. Je dois faire la même liste pour l'association nationale avec l'âge des membres au 1 septembre 2008. Lors de la session d'examens, je dois fournir l'âge des membres le jour de l'examen (qui n'est pas toujours la date à laquelle je prépare les copies des examens). Ainsi, dans la formule de requête, je change CURRENT_DATE pour insérer plutôt la date à laquelle j'ai besoin de l'âge.

Ce que j'aimerais obtenir, c'est une façon de demander à la requête "donne-moi l'âge le 1 janvier 2009" ou "donne-moi l'âge le 1 septembre 2008" sans avoir à remplacer le CURRENT_DATE de la formule 5 fois avec la bonne date. Les premières fois, on a essayé en changeant la date de l'ordinateur avant de de lancer la requête, mais Windows ne semble pas apprécié ça, on a eu des problèmes.

Est-ce possible ?

Merci encore
René-Pierre

OpenOffice 3.2, SRB 1.2
Windows XP, SP 3
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Requête pour âge à différentes dates

Message par jeanmimi »

Pour tester, ce serait sans doute plus facile avec ton fichier.
Je pense à une boite de dialogue sur le critère CURRENT_DATE par exemple.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
René-Pierre
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 04 avr. 2009 00:57

Re: Requête pour âge à différentes dates

Message par René-Pierre »

Bonsoir,

voici mon fichier simplifié, pour tester.

Merci pour votre aide
René-Pierre

OpenOffice 3.2, SRB 1.2
Windows XP, SP 3
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 3929
Inscription : 06 oct. 2008 10:03

Re: Requête pour âge à différentes dates

Message par Oukcha »

Bonjour et bienvenue,

Pour joindre un exemple de fichier avec notre service Ci-Joint (lien en bas de la page lors de la rédaction du message), veuillez consulter : http://user.services.openoffice.org/fr/ ... hp?t=10246

Cordialement, Oukcha
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Re: Requête pour âge à différentes dates

Message par Pierre-Yves Samyn »

Bonjour
René-Pierre a écrit :Ce que j'aimerais obtenir, c'est une façon de demander à la requête "donne-moi l'âge le 1 janvier 2009" ou "donne-moi l'âge le 1 septembre 2008" sans avoir à remplacer le CURRENT_DATE de la formule 5 fois avec la bonne date.
Le plus simple me semble être de créer une table spécifique (un champ clé primaire en auto-valeur et un champ date). Il suffira de saisir la date dans cette table.
Ensuite on ajoute cette table à la requête et on a deux possibilités :
- soit on ajoute la liaison sur entre les champs date
- soit ne relie pas les tables mais on utilise comme critère de sélection :

Code : Tout sélectionner

IN ( SELECT [param] FROM [Param] )
Nota : dans cet exemple la table paramètre et le champ date "paramètre" se nomment Param
René-Pierre
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 04 avr. 2009 00:57

Re: Requête pour âge à différentes dates

Message par René-Pierre »

Bonjour,

Une panne de courant est survenue alors que je transmettais mon fichier hier soir, je vois que rien n'a passé. Mon fichier a été corrompu et je dois le refaire, alors voici une ébauche de ma base. Une fois le fichier refait - j'en a besoin pour les inscriptions ce soir - j'essairai les dernières suggestions.

Merci
Pièces jointes
pratique.odb
(4.12 Kio) Téléchargé 246 fois
René-Pierre

OpenOffice 3.2, SRB 1.2
Windows XP, SP 3
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Requête pour âge à différentes dates

Message par jeanmimi »

J'ai cherché à appliquer les suggestions de Pierre-Yves, mais j'ai mal dû m'y prendre car je n'arrive pas à mieux que ce que j'avais testé auparavant.
Pourtant, la solution ne doit pas être très loin.
Pièces jointes
Base avec Requête DATEDIFF.odb
(4.93 Kio) Téléchargé 237 fois
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Re: Requête pour âge à différentes dates

Message par Pierre-Yves Samyn »

Un exemple donc :

Code : Tout sélectionner

SELECT "nom", "prenom", "tel", "ID-membre", "telcode",  "naissance", 'aura' as " " , "date" as "le",

CASE 
WHEN Month("date") < month("naissance") or ( Month("date") = Month("naissance") and day("date")<day("naissance") )   THEN 
      CAST((year("date") - year("naissance") -1) AS VARCHAR) || ' ans' 
ELSE
      CAST((year("date") - year("naissance") ) AS VARCHAR) || ' ans' 
END as "age"

from "membres", "date"
Rappel : avec cette solution on n'utilise plus de paramètre. Ce dernier est saisi dans la table...
Pièces jointes
Base avec Requête DATEDIFF.odb
(8.08 Kio) Téléchargé 354 fois
René-Pierre
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 04 avr. 2009 00:57

[Résolu] Re: Requête pour âge à différentes dates

Message par René-Pierre »

Bonsoir,

j'ai essayé la solution de Pierre-Yves et tout fonctionne bien. Ce soir, après les inscriptions, mon fichier était à jour, alors j'ai essayé avec la liste des 250 membres, mes 2 rapports sont prèts à être signés et postés. C'est tellement plus rapide !

Encore merci !
René-Pierre

OpenOffice 3.2, SRB 1.2
Windows XP, SP 3
Verrouillé