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

SQL Oracle Discussion :

Requête SQL un peu tordue


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Par défaut Requête SQL un peu tordue
    Bonsoir,

    J'ai une grosse base de turf sous Oracle qui est alimentée automatiquement tous les jours. Je travaille actuellement sur un modèle prédictif pour le jeux. Et oui, ça existe!

    J'ai une question SQL un peu tordue. Suis pas très à l'aise avec les queries analytiques.

    Je chercher à détecter un jockey qui a réussi à se placer 3 fois dans les 3 premiers de la course dans les 3 derniers jours.
    Si cette condition est remplie, envisager de jouer au maximum les 3 prochains chevaux montés par ce jockey. J'ai dit envisager, pas jouer :-) Ensuite il y a d'autres critères...

    Voici le jeu d'essai

    La requête doit me positionner la colonne play à No ou Yes suivant le cas.

    J'ai déjà fait quelques tests avec les fonctions lag et lead mais je coince un peu.

    Un grand merci pour votre aide.

    Laurent, une idée :-)
    Jko

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
         Date	Place	 Play
    22/01/2011	8	No
    29/01/2011	2	No
    30/01/2011	2	No
    31/01/2011	3	No
    05/02/2011	1	yes
    06/02/2011	6	yes
    07/02/2011	5	yes
    07/02/2011	8	No
    10/02/2011	6	No
    12/02/2011	3	No
    13/02/2011	3	No
    13/02/2011	2	No
    14/02/2011	2	yes
    20/02/2011	9	yes
    20/02/2011	2	yes
    20/02/2011	6	No
    21/02/2011	-1	No
    22/02/2011	3	No
    23/02/2011	2	No
    23/02/2011	3	No
    24/02/2011	4	yes
    24/02/2011	-1	yes
    25/02/2011	1	yes
    03/03/2011	5	No
    05/03/2011	6	No
    06/03/2011	4	No
    13/03/2011	9	No
    Ps: je passe la certif SQL Expert en Novembre!! Ne riez pas!

  2. #2
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Ca doit pouvoir se faire en utilisant la méthode dite "Tabibitosan" sur une colonne calculée en fonction de la place qui dira si le joueur est placé ou non.

    Bon je n'ai pas le temps d'écrire la requête, mais en connaissant la méthode ça devrait aller ...

    Pour info les questions de la certif ne sont pas si "complexes".

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut Travail bien prepare, travail facilite
    Vu qu'on a 4jours consecutifs ou est classe parmi les 3premiers, on devrait aussi avoir 4 jours consecutifs ou on envisage de jouer le cheval.
    Citation Envoyé par jkofr Voir le message
    Je chercher à détecter un jockey qui a réussi a se placer 3 fois dans les 3 premiers de la course au dans les 3 derniers jours.
    Si cette condition est remplie, envisager de jouer au maximum les 3 prochains chevaux monté par ce jockey.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
         Date	Place	 Play
    29/01/2011	2	No
    30/01/2011	2	No
    31/01/2011	3	No
    05/02/2011	1	yes
    06/02/2011	6	yes
    07/02/2011	5	yes
    07/02/2011	8	No
    Par rapport a votre besoin, je pense qu'il y a un soucis.
    La ligne 8, du 7/02, ou il est classe 8 eme on devrait etre a vrai aussi. Vu que que la serie du 30-31-05 correspond a votre critere.
    Ou bien, c'est la ligne 4 du 31 qui devrait etre a vrai aussi, a vous de voir, mais il y a un probleme dans tous les cas.



    Du coup peut-etre que les requetes que vous avez ecrites fonctionnent en fait
    Mais faut les proposer pour le voir

  4. #4
    Membre émérite Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Par défaut
    Hello Rams7s,

    Merci pour ton message,
    En fait je n'ai pas précisé un detail, il faut le numéro de la course pour les cas ou la date est la même.

    Voici le jeux d'essais avec la modif.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    WITH Courses AS (
    Select to_Date('22/01/2011') Dt, 	8  Place, 7 NumCourse from dual
    Union all
    Select to_Date('29/01/2011') Dt, 	2  Place, 4 NumCourse from dual
    Union all
    Select to_Date('30/01/2011') Dt, 	2  Place, 3 NumCourse from dual
    Union all
    Select to_Date('31/01/2011') Dt, 	3  Place, 1 NumCourse from dual
    Union all
    Select to_Date('05/02/2011') Dt, 	1  Place, 4 NumCourse from dual
    Union all
    Select to_Date('06/02/2011') Dt, 	6  Place, 5 NumCourse from dual
    Union all
    Select to_Date('07/02/2011') Dt, 	5  Place, 7 NumCourse from dual
    Union all
    Select to_Date('07/02/2011') Dt, 	8  Place, 8 NumCourse from dual
    Union all
    Select to_Date('10/02/2011') Dt, 	6  Place, 3 NumCourse from dual
    Union all
    Select to_Date('12/02/2011') Dt, 	3  Place, 2 NumCourse from dual
    Union all
    Select to_Date('13/02/2011') Dt, 	3  Place, 4 NumCourse from dual
    Union all
    Select to_Date('13/02/2011') Dt, 	2  Place, 5 NumCourse from dual
    Union all
    Select to_Date('14/02/2011') Dt, 	2  Place, 7 NumCourse from dual
    Union all
    Select to_Date('20/02/2011') Dt, 	9  Place, 1 NumCourse from dual
    Union all
    Select to_Date('20/02/2011') Dt, 	2  Place, 4 NumCourse from dual
    Union all
    Select to_Date('20/02/2011') Dt, 	6  Place, 7 NumCourse from dual
    Union all
    Select to_Date('21/02/2011') Dt, 	-1 Place, 6 NumCourse from dual
    Union all
    Select to_Date('22/02/2011') Dt, 	3  Place, 5 NumCourse from dual
    Union all
    Select to_Date('23/02/2011') Dt, 	2  Place, 7 NumCourse from dual
    Union all
    Select to_Date('23/02/2011') Dt, 	3  Place, 8 NumCourse from dual
    Union all
    Select to_Date('24/02/2011') Dt, 	4  Place, 2 NumCourse from dual
    Union all
    Select to_Date('24/02/2011') Dt, 	-1 Place, 4 NumCourse from dual
    Union all
    Select to_Date('25/02/2011') Dt, 	1  Place, 5 NumCourse from dual
    Union all
    Select to_Date('03/03/2011') Dt, 	5  Place, 1 NumCourse from dual
    Union all
    Select to_Date('05/03/2011') Dt, 	6  Place, 2 NumCourse from dual
    Union all
    Select to_Date('06/03/2011') Dt, 	4  Place, 1 NumCourse from dual
    Union all
    Select to_Date('13/03/2011') Dt, 	9  Place, 6 NumCourse from dual
    )
    La ligne 8 ne doit pas être retenue car on s’arrête après 3 chevaux.

    Je vais poster quelques essais dans la journée.

    Merci a vous
    jko

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je l'ai fait comme ça :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    select dt, place, numcourse
         , case
             when least(max(case place when -1 then 9 else place end) over(order by dt asc, numcourse asc rows between 3 preceding and 1 preceding)
                      , max(case place when -1 then 9 else place end) over(order by dt asc, numcourse asc rows between 4 preceding and 2 preceding)
                      , max(case place when -1 then 9 else place end) over(order by dt asc, numcourse asc rows between 5 preceding and 3 preceding))
                  between 0 and 3
              and max(case place when -1 then 9 else place end) over(order by dt asc, numcourse asc rows between 6 preceding and 4 preceding) > 3
             then 'Yes'
             else 'No'
           end as Play
      from Courses;
     
    DT              PLACE  NUMCOURSE PLAY
    ---------- ---------- ---------- ----
    22/01/2011          8          7 No 
    29/01/2011          2          4 No 
    30/01/2011          2          3 No 
    31/01/2011          3          1 No 
    05/02/2011          1          4 Yes
    06/02/2011          6          5 Yes
    07/02/2011          5          7 Yes
    07/02/2011          8          8 No 
    10/02/2011          6          3 No 
    12/02/2011          3          2 No 
    13/02/2011          3          4 No 
    13/02/2011          2          5 No 
    14/02/2011          2          7 Yes
    20/02/2011          9          1 Yes
    20/02/2011          2          4 Yes
    20/02/2011          6          7 No 
    21/02/2011         -1          6 No 
    22/02/2011          3          5 No 
    23/02/2011          2          7 No 
    23/02/2011          3          8 No 
    24/02/2011          4          2 Yes
    24/02/2011         -1          4 Yes
    25/02/2011          1          5 Yes
    03/03/2011          5          1 No 
    05/03/2011          6          2 No 
    06/03/2011          4          1 No 
    13/03/2011          9          6 No

  6. #6
    Membre émérite Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Par défaut
    Hello Waldar,

    Génial!

    Par contre je ne comprends pas la condition d’arrêt qui selon ta ligne 7 est conditionnées par max (place) sur les lignes de 6 a 4 précédentes.

    La condition est sur le nombre de coups max a jouer.
    Ou alors j'ai pas saisis quelque chose.

    Jko

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    C'est pour éviter d'avoir quatre "Yes" d'affilé si le premier "Yes" est aussi classé dans les trois premiers, le cas de figure précisé par Rams7s.

    Je m'assure donc avoir au moins un classement moins bon que 3 entre les lignes -6 à -4.

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

Discussions similaires

  1. Requête SQL un peu folle !
    Par bronon dans le forum Requêtes
    Réponses: 0
    Dernier message: 03/01/2014, 22h15
  2. requête sql un peu complexe
    Par new_wave dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/08/2007, 14h41
  3. erreur requète SQL : trop peu de paramètres
    Par pierre.egaud dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 21/04/2006, 14h57
  4. requête SQL un peu casse tête
    Par hellbilly dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/12/2005, 10h03
  5. requette sql un peu tordue
    Par maxidoove dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/08/2005, 14h52

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