IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

InterBase Discussion :

EXTRACT dans un GROUP BY


Sujet :

InterBase

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Points : 58
    Points
    58
    Par défaut EXTRACT dans un GROUP BY
    Bonjour,

    J'essaye de faire une requête et je reçois constamment un message d'erreur.

    J'ai beau gratter, je ne comprends pas.

    Donc, j'ai une date dans une relation. Je dois vérifier que la relation ne contient qu'une seule fois un id pour une même année.
    Je peux donc trouver ça dans la table:
    ID dates
    1 01/01/2000
    1 01/01/2001

    Mais pas
    1 01/02/2000

    Ca l'ID 1 existe déjà en 2000.

    Tout ça pour faire un trigger.

    Bon, pour simplifier, j'ai toujours commencé par faire une requête toute bête pour compter combien j'avais d'ID par année.

    J'avais pensé à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*)
    FROM table
    GROUP BY id,EXTRACT(YEAR FROM dates)
    Mais j'ai un message d'erreur.
    Token unknow ... extract

    Pourquoi? On peut pas faire de group by sur un extract??

    Sur interbase bien entendu.

    Merci de l'aide.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Plutôt comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id, EXTRACT(YEAR FROM dates), COUNT(*)
    FROM TABLE
    GROUP BY 1, 2;
    En y réfléchissant je verrais plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IF EXISTS(
      SELECT ID
      FROM TABLE
      WHERE DATES BETWEEN :DATE_DEBUT AND DATE_FIN) THEN
    BEGIN
      -- Gestion doublon
    END
    ELSE
      -- suite ...
    @+ Claudius

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Points : 58
    Points
    58
    Par défaut
    Merci de l'aide!!

    Mais, la requête que tu proposes en premier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id,EXTRACT(YEAR FROM dates), COUNT(*)
    FROM table
    GROUP BY 1,2
    Renvoie le message Token unknow ... 1

    Ce qui me semble logique puisque '1' est inconnu.

    Je me suis dit que c'était peut-être un raccourcis d'écriture qui signifiait le champ 1 (id) et 2 (l'extract)

    Donc j'ai aussi essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id,EXTRACT(YEAR FROM dates), COUNT(*)
    FROM table
    GROUP BY id,EXTRACT(YEAR FROM dates)
    Pareil: Token unknow ...extract


    Quand à ta deuxième proposition, elle ne correspond pas à ce qu'on me demande.

    Je dois identifier le nombre de fois qu'un ID est présent par année. Si on le trouve 1 fois en 2000 et 4 fois en 2001, je dois obtenir

    Année Count
    2000 1
    2001 4

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par rj450 Voir le message
    Mais, la requête que tu proposes en premier:
    Renvoie le message Token unknow ... 1


    Tout d'abord, quelle est ta version d'Interbase ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Points : 58
    Points
    58
    Par défaut
    Version 1.0.0.326

    Merci

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    re-

    Tu es sûr de toi. Version 1 c'est antédiluvien.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Points : 58
    Points
    58
    Par défaut
    Ben oui.

    C'est la version que l'école nous a fourni.

    Comme on travaille dessus en cours, j'ai bien du l'installer sur mon pc parce que d'un sgbd à l'autre, il y a des différences.

    Donc, j'suis bien coincé avec!

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Well, well, well...

    J'ai commencé à utiliser Interbase avec la version 6, ce qui de mémoire doit remonter au tout début des années 2000. Depuis le produit a beaucoup évolué.

    Si ta version ne reconnait pas Extract, on est mal parti.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Points : 58
    Points
    58
    Par défaut
    Ben ma version reconnait extract.

    Quand je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id,EXTRACT(YEAR FROM dates)
    FROM table
    Je reçois

    1 2000
    2 1870
    3 2001
    1 2001
    ETC.

    Donc ma version le reconnaît bien.

    Oui....mais pas dans un group by.

    Bon, c'est pas grave, je poserai la question en cours.

    Merci quand même pour l'aide.

  10. #10
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    N'hésite pas à revenir à la charge dès que tu auras plus d'infos.
    Et fait toi confirmer la version d'IB utilisée.

    @+ Claudius

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Points : 58
    Points
    58
    Par défaut
    Le copyright date de 2000 pourtant.

    Image à l'appui.

    Images attachées Images attachées  

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    ibconsole n'est pas Interbase mais un outil

    essayes
    SELECT rdb$get_context('SYSTEM', 'ENGINE_VERSION')
    from rdb$database;
    il n'est pas prouvé que ce soit Interbase compliant dirait nos amis anglophone
    enfin je parierai pour interbase 6.01
    si je me referre a ce lien http://info.borland.com/devsupport/i...se/opensource/

    il serait aussi peut-être temps de parler a ton prof de Firebird
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Points : 58
    Points
    58
    Par défaut
    OK, j'ai visiblement des progrès à faire.

    Mais j'suis motivé.

    J'ai fait un copier/coller de ta requête dans 'IBconsole'.

    J'ai ce résultat:

    Dynamic SQL Error
    SQL error code = -804
    Function unknown
    RDB$GET_CONTEXT
    Statement: SELECT rdb$get_context('SYSTEM', 'ENGINE_VERSION')
    from rdb$database
    J'ai un TP a rendre mercredi. J'y arriverai.....

  14. #14
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par rj450 Voir le message
    Le copyright date de 2000 pourtant.
    1.0.0.326, ça c'est la version d'IBConsole.
    Donc tu es certainement avec la v6 OpenSource d'Interbase. Ce n'est pas la meilleure version.

    J'ai déinstallé la v6 depuis très longtemps mais j'ai toujours une version 1.5 de Firebird, donc très proche. Mais malheureusement les 2 requêtes proposées (group by 1, 2 ou group by ID, Extract(...)) fonctionnent.

    Donc pas de solution immédiate à te proposer (à part utiliser Firebird ).

    [edit] rdb$get_context est arrivé bien plus tard (FB v2 je pense) et dispo uniquement avec Firebird.

    @+ Claudius

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Points : 58
    Points
    58
    Par défaut
    Hé bien dans ce cas, le modeste étudiant que je suis à fait le maximum.

    Je remettrai mon TP avec le code mais sans avoir pu le voir fonctionner.

    Merci beaucoup de l'aide.

    Mais je reviendrai!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre un champ Blob dans un Group By
    Par WebPac dans le forum SQL
    Réponses: 1
    Dernier message: 17/08/2005, 18h03
  2. Enregistrer un nouveau serveur dans un groupe de serveur ?
    Par pop bob dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/07/2005, 16h18
  3. Regrouper des champs dans un GROUP BY
    Par kaiserazo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 11/07/2005, 08h43
  4. GROUP_ID dans requete GROUP BY
    Par quemener dans le forum Oracle
    Réponses: 11
    Dernier message: 25/10/2004, 10h59
  5. extraction dans une date
    Par HULK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/11/2003, 08h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo