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

Développement SQL Server Discussion :

Récupération d'un ensemble depuis une date


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 208
    Par défaut Récupération d'un ensemble depuis une date
    Bonjour,

    le titre n'est pas très explicite, mais je rencontre un problème de performance sur une requête.

    En fait, j'ai une table avec un id, une date, et un type (qui peut être 0 ou 1).

    Je cherche à récupérer de manière très rapide le nombre d'éléments de type 1, depuis l'avant dernier élément de type 0.

    Voici un exemple de ma table (je ne mets pas les heures pour simplifier)
    ID, Date, Type
    1, 01/01/2015, 1
    2, 01/01/2015, 0
    3, 03/01/2015, 1
    4, 05/01/2015, 1
    5, 07/01/2015, 1
    6, 07/01/2015, 0

    J'aimerais récupérer les informations de cette manière avec un select (si possible) :
    ID, Date, Type, Nb type 1 precedent
    1, 01/01/2015, 1, NULL (ou 0 ce n'est pas grave)
    2, 01/01/2015, 0, 1
    3, 03/01/2015, 1, NULL (ou 0)
    4, 05/01/2015, 1, NULL (ou 0)
    5, 07/01/2015, 1, NULL (ou 0)
    6, 07/01/2015, 0, 3

    Là où je bloque c'est que le tout doit être dynamique, si jamais dans mon exemple, l'élément d'ID 5 devient un élément de type 0, alors :
    1, 01/01/2015, 1, NULL (ou 0 ce n'est pas grave)
    2, 01/01/2015, 0, 1
    3, 03/01/2015, 1, NULL (ou 0)
    4, 05/01/2015, 1, NULL (ou 0)
    5, 07/01/2015, 0, 2
    6, 07/01/2015, 0, 0

    Je suis donc passé par une requête "classique", avec l'ajout une colonne qui est une sous-requête et qui me récupère ce que je veux, mais cela prend énormément de temps. J'ai essayé de créer une vue indexée, mais il y a tellement de contraintes, que je n'ai jamais pu réussir à placer l'index.

    Auriez-vous une idée, une autre façon de faire pour améliorer les performances ?

    Je vous remercie.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    ça doit pouvoir se résoudre avec une fonction de regroupement fenêtrée...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 208
    Par défaut
    Bonjour,

    auriez-vous une idée sur le type de fonction ?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Une différence de sommes ?
    Si TYPE = 1 Alors 0 Sinon Somme(TYPE) pour toutes les lignes précédentes - Somme(Col calculée) pour toutes les lignes précédentes
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 208
    Par défaut
    Merci de votre aide,

    pourriez-vous expliquer un peu plus votre solution ?

    Voici la requête que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select ID, Date, Type
    , (select count(ID) as nb from maTable m2 where Type = 1  m2.Date <= maTable.Date and m2.Date >= (select top 1 Date from (select top 1 Date from maTable m3 where m3.Date < maTable.Date order by Date desc union all select \'01/01/2010\' as "Date") as "temp" order by Date desc))
    from maTable

    Je ne suis pas très fier de cette dernière colonne... Et bien sûr, c'est celle-ci qui prend énormément de temps.

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Regarde les fonctions SUM..OVER.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

Discussions similaires

  1. Faire un compte a rebour h:m:s depuis une date php
    Par Death83 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 04/08/2006, 19h34
  2. Extraire diretement un age depuis une date
    Par zzman dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/07/2006, 20h54
  3. Trouver les fichiers modifiés depuis une date/heure précise
    Par sinok dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 18/07/2006, 17h56
  4. [Utilisation] Récupérer les modifications depuis une date donnée
    Par Sapience dans le forum CVS
    Réponses: 1
    Dernier message: 15/02/2006, 12h08
  5. Réponses: 4
    Dernier message: 16/09/2003, 10h51

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