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

SQLite Discussion :

Quel équivalent pour OVER()


Sujet :

SQLite

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Février 2017
    Messages : 11
    Points : 3
    Points
    3
    Par défaut Quel équivalent pour OVER()
    Bonjour,
    Je suis en train de rédiger un code sur QGIS dans une BD Spatialite.
    Le problème c'est que je connais pas bien le langage sqlite, et lors de l’exécution il m'affiche : "near "OVER": syntax error"

    Existe'il un équivalent??
    Si jamais vous trouvez d'autres erreurs de syntaxe que je risque de rencontrer, voici le code.
    MERCI!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
      SELECT T0.T0NOM                                                
           , T0.T0PRF                                                
           , T0.T0SUF                                                
           , CASE                                                    
                 WHEN T1.T0NOM IS NOT NULL                           
                      THEN T1.T0RES                                  
                 WHEN T2.T0NOM IS NOT NULL                           
                      THEN T2.T0RES+1                                
                 ELSE                                                
                      SUM(T0.T0RES)                                  
                      OVER(ORDER BY T0.T0NOM, T0.T0ID                
                           ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) 
             END AS RESULTAT                                         
      FROM TT01 AS T0                                                
      LEFT OUTER JOIN TT01 AS T1                                     
        ON T1.T0SUF =T0.T0PRF                                        
       AND T1.T0CAP =T0.T0CAP                                        
      LEFT OUTER JOIN TT01 AS T2                                     
        ON T2.T0SUF =T0.T0PRF                                        
       AND T2.T0CAP<>T0.T0CAP

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 339
    Points : 39 735
    Points
    39 735
    Billets dans le blog
    9
    Par défaut
    Il s'agit d'une fonction de fenêtrage, qui est ici utilisée pour retrouver la ligne qui précède.
    Pour cet usage, on peut remplacer par la fonction LAG, dont voici la doc PGSQL

    https://www.postgresql.org/docs/8.4/...ns-window.html

    Je crois que QGIS est une extension de PostGre, si c'est bien le cas on peut supposer que LAG est supporté

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Février 2017
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Quand je remplace, ça va me mettre la même erreur : "near "LAG": syntax error"... Pareil pour la fonction "LEAD".

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 339
    Points : 39 735
    Points
    39 735
    Billets dans le blog
    9
    Par défaut
    Malheureusement je ne connais pas QGIS, je ne peux donc pas aider plus

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Février 2017
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Merci escartefigue, tu m'as déjà bien aidé avec le code que tu m'as sortie. Je vais attendre de voir si quelqu'un d'autre peut m'aider encore aujourd'hui, sinon je vais passer à autre chose et tant pis. On ne peut pas toujours réussir à tout faire non plus!

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 175
    Points : 41 367
    Points
    41 367
    Billets dans le blog
    63
    Par défaut
    Bonjour
    Citation Envoyé par Panthot Voir le message
    Le problème c'est que je connais pas bien le langage sqlite
    je viens de comprendre pourquoi le post se retrouve dans ce forum ! Langage SQLite au lieu de SQL

    du coup, quel SGBD est utilisé par QGIS sqlite (qui ne connait pas les fonctions de fenêtrage) ou Postgre (qui lui les connait)
    dans l'exemple que j'ai téléchargé je ne vois que des fichiers d'extensions .dbf,.shx,.shp,.prj,.cpg donc à priori ce n'est pas SQLite ne connaissant pas PostGre je serais bien en peine d'en dire plus, si ce n'est que la question n'est pas posé dans le bon forum

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Février 2017
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    QGIS sqlite (qui ne connait pas les fonctions de fenêtrage)
    Merci! J'ai ma réponse! Et je m'en contenterai, j'en ai marre de se projet impossible à mener

    Citation Envoyé par SergioMaster Voir le message
    à priori ce n'est pas SQLite [...] la question n'est pas posé dans le bon forum
    C'est vrai que je ne suis pas très calé en programmation, mais sous QGIS on peut insérer des tables sous Spatialite et rédiger des codes en sqlite.
    (C'est la première fois que je fais ça, donc je ne m'avance pas trop. Mais pour illustrer mes propos, voici un petit screen shoot pour vous aider à comprendre).


    Nom : Capture.PNG
Affichages : 104
Taille : 65,7 Ko

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 175
    Points : 41 367
    Points
    41 367
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    sur les screenshots que j'avais vu, je ne voyais que MSSQL, ORACLE et PostGIS (à priori post pour PostGres) d'où ma perplexité.
    Quand je disais: "pas dans le bon Forum" je pensais qu'il valait mieux que la question soit directement posé en SQL


    remplacer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SUM(T0.T0RES)                                  
                      OVER(ORDER BY T0.T0NOM, T0.T0ID                
                           ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
    par autre chose ?

    Ce qui suit n'est que spéculation/base de travail , sans jeu d'essai (et résultat escompté)

    on pourrait passer par une CTE (common table expression) pour le SUM
    // à mettre au début du SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WITH CTE1 (SELECT T0NOM,T0ID,SUM(TORES) AS SUMTORES FROM TT01
                     GROUP BY T0NOM,T0ID)
    mais ce sont les PRECEDING que je ne sais pas exprimer ou du moins ne comprends pas totalement
    je déduit qu'il s'agit plus ou moins de "la valeur de l'enregistrement précédent" il faudrait alors introduire une notion de RANG sur cette CTE.



    Quelque chose comme (à la suite de la première CTE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ,  CTE2 AS (SELECT (SELECT COUNT(*) FROM CTE1 AS b WHERE b.T0NOM<=a.T0NOM AND b.T0ID<=a.T0ID) AS RANG,
                  a.T0NOM AS NOM ,a.T0ID AS ID,a.SUMTORES AS STORES FROM CTE1 a)
    dans le CASE il faudrait alors récupérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT STORES FROM CTER WHERE RANG=(SELECT RANG-1 FROM CTER WHERE NOM=T0.NOM AND ID=T0.ID)
    Attention tout cela est sans filet (pas de contrôle) et je ne suis pas un SQLite pro, c'est juste que je me suis trouvé confronté à un problème de fenêtrage SQlite récemment (beaucoup moins complexe) et que j'ai contourné par une CTE

    [EDIT] note : je viens de faire un jeu d'essai rapide, si c'est bien "la valeur de l'enregistrement précédent", ce que je propose fonctionne

    Il y a aussi, certainement, la possibilité de faire une CTE RECURSIVE pour obtenir le "rang" mais je ne voit pas vraiment bien la syntaxe à adopter

Discussions similaires

  1. Quel équivalent RvSystem (RaveReport) pour FastReport ?.
    Par mmsalem dans le forum FastReport
    Réponses: 2
    Dernier message: 06/01/2017, 09h13
  2. Quel langage pour le développement embarqué ?
    Par freakydoz dans le forum Débats sur le développement - Le Best Of
    Réponses: 37
    Dernier message: 23/04/2007, 19h31
  3. Réponses: 1
    Dernier message: 25/08/2006, 14h34
  4. Quel Outil pour les applis Industrielles ET bases de données
    Par ThierryAIM dans le forum Débats sur le développement - Le Best Of
    Réponses: 8
    Dernier message: 23/04/2003, 09h14
  5. Quel outil pour du développement Client/Serveur (Win XP) ?
    Par jey_bonnet dans le forum Débats sur le développement - Le Best Of
    Réponses: 5
    Dernier message: 02/11/2002, 14h57

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