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

Langage SQL Discussion :

Problème avec des requêtes SQL


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème avec des requêtes SQL
    Bonjour,

    Je ne suis pas trop doué avec tout ce qui est SQL et je dois effectuer quelques requêtes, mais je n'arrive pas à trouver une piste.

    Mon problème ce résume comme suit :

    J'ai deux tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE pageviews AS
    (
    visitorId INT
    , sessionId INT
    , pageInSession INT
    , pageviewDate DATE
    , pageviewDts TIMESTAMP
    , pageType VARCHAR(50)
    );
    Chaque ligne de ce tableau fait référence à une vue de page d'un utilisateur.
    La combinaison de visitorld, sessionId et pageInSession peut être considérée comme les principales clés de la table pageviews.
    Le tableau contient des données de vue de page pour les 12 derniers mois (= ~ 15 milliards de lignes).
    PageType contient les valeurs suivantes : Game, Navigation, Profil.

    Deuxième table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE sessions AS
    (
    visitorId INT
    , sessionId INT
    , sessionDate DATE
    , sessionDts TIMESTAMP
    , deviceType VARCHAR(15)
    );
    Chaque ligne de cette table fait référence à une session de navigation d'un utilisateur.
    La combinaison de visitorld et sessionId peut être considérée comme clé principale de la table sessions.
    La table contient de données de session pour les 12 derniers mois ( =~ 5 milliards de lignes) .
    deviceType contient les valeurs : Desktop, Mobile, Tablet.

    Je veux savoir quelle requête SQL ( ou ensemble de requêtes) est nécessaire pour calculer le nombre des premiers utilisateurs (ceux qui utilisent l'application pour la première fois) par jour, par type de périphérique au cours des 14 derniers jours ?

    Je veux aussi savoir dans un deuxième lieu quelle requête SQL ( ou ensemble de requêtes) est nécessaire pour calculer le taux de rétention moyen de 3 jours sur les pages de jeux pour les utilisateurs de Desktop au cours des 14 derniers jours ?

    J'ai besoin d'aide please Help

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    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 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Bonjour,


    Voici une requête permettant de compter les personnes qui se sont connectées pour la première fois dans les 14 derniers jours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select count(distinct idv)
    from (select T1.visitorid  as idv
          from  sessions T1
          left  outer join session T2
            on  T2.visitorid = T1.visitorid
            and T2.sessionDate < dateadd(dd, -14, getdate())
          where T1.sessionDate > dateadd(dd, -15, getdate())
            and T2.visitorid is null)
    Les fonctions de manipulation de date sont très différentes d'un SGBD à l'autre, il faudra donc adapter en fonction du votre

    Par contre cette question :
    Citation Envoyé par TarekBakri Voir le message
    Je veux aussi savoir dans une deuxième lieu quelle requête SQL ( ou ensemble de requêtes) est nécessaire pour calculer le taux de rétention moyen de 3 jours sur les pages de jeux pour les utilisateurs de Desktop au cours des 14 derniers jours?
    No comprendo amigo

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Re-Bonjour ;

    Je vous remercie pour votre réponse, votre requête marche sur Mysql ou pas?

    En ce qui concerne la deuxième partie, désolé j'ai oublié de préciser que la définition exacte du taux de rétention de 3 jours est: "Le pourcentage d'utilisateurs actifs quotidiens qui sont encore actifs 3 jours plus tard"

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    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 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par TarekBakri Voir le message
    Re-Bonjour ;

    Je vous remercie pour votre réponse, votre requête marche sur Mysql ou pas?
    Non pas en l'état, pour MySQL il faut remplacer la fonction DATEADD par DATE_ADD dont la syntaxe est différente
    cf. https://dev.mysql.com/doc/refman/5.5...ction_date-add


    Citation Envoyé par TarekBakri Voir le message
    En ce qui concerne la deuxième partie, désolé j'ai oublié de préciser que la définition exacte du taux de rétention de 3 jours est: "Le pourcentage d'utilisateurs actifs quotidiens qui sont encore actifs 3 jours plus tard"
    Si il suffit de considérer qu'une personne connectée aujourd'hui s'était déjà connectée au moins une fois il y a trois jours ou plus, alors vous pouvez faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select sum(case when exists
                        (select 1
                         from session as S1
                         where S1.visitorId   = T1.visitorid
                           and S1.sessionDate < DATE_SUB(T1.sessionDate interval 2 day))
                    then 1) end as actifs
         , count(*) as total
    from sessions as T1

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Si vous attendez 15 milliards de ligne par 12 mois dans votre table pageviews vous allez au devant de sacrés problèmes...
    1) le type de données INT est limité à 2 milliards...
    2) si vous utilisez MySQL bon courage !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 051
    Points : 9 386
    Points
    9 386
    Par défaut
    Citation Envoyé par TarekBakri Voir le message
    la définition exacte du taux de rétention de 3 jours est: "Le pourcentage d'utilisateurs actifs quotidiens qui sont encore actifs 3 jours plus tard"
    Ce n'est toujours pas très clair.
    On a donc un univers : Ensemble des individus qui se sont connectés entre le jour A et le jour B.
    Et parmi cet univers, on veut connaître ceux qui ont eu au moins 2 connexions avec maximum 3 jours d'intervalle, la 1ère connexion ayant lieu entre le jour A et B , ainsi que la 2ème. Ou un truc comme ça.

    Si on considère une semaine ( Jour A = lundi, Jour B = dimanche)
    Si X se connecte lundi matin , mardi matin, puis samedi matin , il est considéré comme "encore actif", ou pas ?
    Idem si X se connecte lundi matin , vendredi matin et samedi matin ?

    Et il y a surement plein d'autres cas à problème.

    Essaie de bien recenser les cas, bien reformuler la règle. La traduction en langage informatique sera alors possible.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Voici en SQL une réponse à votre demande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH 
    T0 AS
    (
    SELECT individuID, ROW_NUMBER() OVER(PARTITION BY individuID ORDER BY LaDate) AS N
    FROM   MaTable
    WHERE  LaDate BETWEEN A and B
    )
    SELECT 
    FROM   T0 AS T1
           JOIN T0 AS T2
                ON T1.individuID,  = T2.individuID
                AND T1.LaDate < T2.LaDate
    WHERE  DATEDIFF(day, T1.LaDate, T2.LaDate) <= 3
    Problème MySQL ne gère pas la CTE avant la version 8 et toujours pas les fonctions de fenêtrage.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [SQL] Problème avec une requête sql
    Par bodysplash007 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 11/05/2007, 17h30
  2. [SQL] Pb avec des requêtes SQL passer en GET
    Par resterzen dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/10/2006, 15h37
  3. [MySQL] Problème avec une requête SQL
    Par chobol dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 11/05/2006, 12h29
  4. [VB]Problème avec une requête SQL
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 18/03/2006, 17h47
  5. Problème avec des requêtes
    Par yoda7666 dans le forum ASP
    Réponses: 13
    Dernier message: 09/03/2006, 18h16

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