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 :

Requete avec groupement par interval de date


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2009
    Messages : 61
    Points : 59
    Points
    59
    Par défaut Requete avec groupement par interval de date
    Bonjour à tous,
    Je suis en train de créer un filtre qui doit me permettre de choisir des images classer par le nombre de vue mais regroupées par interval de temps.
    Exemple:
    voir les images les + vues des dernières 24h
    voir les images les + vues depuis 3 jours
    ... depuis 1 semaine

    j'aimerai avec la requête sélectionner toutes les images et après les regrouper par interval de temps classées par nombre de vue.

    Voici la structure de la table
    ImageId pk
    Name
    size
    numberSeen
    dateSeen

    j'avais fait une requête mais elle me retourne que les images des dernières 24h -3j ou 1semaine

    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Un peu de fun avec une CTE récursive (SQL Server 2005 et 2008) :

    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
    ;WITH
    	CTE AS
    	(
    			SELECT	0 AS hour_start
    				, 24 AS hour_end
    				, 1 AS nb_jour
    		UNION ALL
    			SELECT	hour_start + 24
    				, hour_end + 24
    				, nb_jour + 1
    			FROM	CTE
    			WHERE	nb_jour < 7
    	)
    SELECT		C.nb_jour
    		, T.ImageId
    		, SUM(T.numberSeen) AS totalSeen
    FROM		CTE AS C
    INNER JOIN	dbo.maTable AS T 
    			ON DATEDIFF(hour, dateSeen, GETDATE()) >= C.hour_start
    			AND DATEDIFF(hour, dateSeen, GETDATE()) < C.hour_end
    GROUP BY	C.nb_jour
    		, T.ImageId
    Ou encore :

    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
    ;WITH
    	CTE_JOUR (hour_start, hour_end, nb_jour) AS
    	(
    		SELECT 0, 24, 1
    		UNION ALL SELECT 24, 48, 2
    		UNION ALL SELECT 48, 72, 3
    		UNION ALL SELECT 72, 96, 4
    		UNION ALL SELECT 96, 120, 5
    		UNION ALL SELECT 120, 144, 6
    		UNION ALL SELECT 144, 168, 7
    	)
    SELECT		C.nb_jour
    		, T.ImageId
    		, SUM(T.numberSeen) AS totalSeen
    FROM		CTE_JOUR AS C
    INNER JOIN	dbo.maTable AS T 
    			ON DATEDIFF(hour, dateSeen, GETDATE()) >= C.hour_start
    			AND DATEDIFF(hour, dateSeen, GETDATE()) < C.hour_end
    GROUP BY	C.nb_jour
    		, T.ImageId
    Ou encore (surtout si vous êtes sous SQL Server 2000) :

    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
    SELECT		C.nb_jour
    		, T.ImageId
    		, SUM(T.numberSeen) AS totalSeen
    FROM		(
    			SELECT 0, 24, 1
    			UNION ALL SELECT 24, 48, 2
    			UNION ALL SELECT 48, 72, 3
    			UNION ALL SELECT 72, 96, 4
    			UNION ALL SELECT 96, 120, 5
    			UNION ALL SELECT 120, 144, 6
    			UNION ALL SELECT 144, 168, 7
    		) AS C (hour_start, hour_end, nb_jour)
    INNER JOIN	dbo.maTable AS T 
    			ON DATEDIFF(hour, dateSeen, GETDATE()) >= C.hour_start
    			AND DATEDIFF(hour, dateSeen, GETDATE()) < C.hour_end
    GROUP BY	C.nb_jour
    		, T.ImageId
    @++

  3. #3
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2009
    Messages : 61
    Points : 59
    Points
    59
    Par défaut
    Merci pour les exemples, c'est super^^
    Je vais tester de mon côté et le retranscrire en Icriteria Nhibernate

    Je reviens mettre en résolu dés que j'ai le filtre fonctionnel.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Qu'est-ce que vous voulez dire par "regrouper des images" ?
    Que vous faut-il exactement comme résultat (des sommes, des moyennes, ...) ?

    S'il s'agit juste de les ordonner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT <etc.>, MyOrder.Val
    FROM <etc.>
    CROSS APPLY (
     SELECT CASE
     WHEN MaDate > DATEADD(dd, -1, GETDATE()) THEN 1
     WHEN MaDate > DATEADD(dd, -3, GETDATE()) THEN 2
     ELSE 3
     END
    ) MyOrder(Val)
    WHERE MaDate > DATEADD(dd, -7, GETDATE())
    ORDER BY MyOrder.Val ASC, NombreDeVue DESC
    Most Valued Pas mvp

  5. #5
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2009
    Messages : 61
    Points : 59
    Points
    59
    Par défaut
    Merci pour les réponses, j'ai pu réaliser une proc stock (sql dynamique) et du coup tout fonctionne correctement.

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

Discussions similaires

  1. Requete avec regroupement par mois.. ou pas ?
    Par flamby6969 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 19/06/2008, 12h43
  2. Requete avec cumul par semaine
    Par Fleur-Anne.Blain dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/07/2007, 15h24
  3. Requetes Avec Count et condition sur date
    Par Harry dans le forum WinDev
    Réponses: 1
    Dernier message: 04/06/2007, 15h23
  4. [Access] requete avec concaténation par ligne
    Par stoonman dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/11/2006, 18h35
  5. [Dates] probleme avec mktime et interval entre dates
    Par steinfield dans le forum Langage
    Réponses: 7
    Dernier message: 18/05/2006, 12h47

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