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

MS SQL Server Discussion :

TOP N OVER Group BY


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut TOP N OVER Group BY
    Bonjour,
    Je cherche la manière la plus efficace de de prendre le TOP des differents groupes d'un GROUP BY

    J'ai dejà essayé la méthode ROW_NUMBER() OVER PARTITION Method
    Mais ca reste asser lent

    J'ai aussi essayé la méthode CROSS APPLY Method mais ca ne semble pas plus performant

    Mon groupe BY est tres simple et porte sur une seule colonne

    Donc j'envisage une procedure stockée qui effectuerait une boucle TOP n sur un select de chaque element distinc de ma colone

    Avez vous des commentaire ou une suggestion ?

    Merci de votre aide

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    l'indexation !!!!

    Si tu respectait la charte de postage et nous donnait :
    1) la requête SQL que tu veut faire
    2) le DDL des tables en jeu ?

    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/ * * * * *

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bonjour SQL Pro

    Voici le DDL de ma table ainsi que ma SP actuelle
    J'ai sur cette table 4 index

    Est il possible de sortir le scrip de creation des index d'un coup aves SSMS ?
    Ou bien je dois les extraires un a un ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE [dbo].[GPSTrace](
    	[id] [int] IDENTITY(1,1) NOT NULL,
    	[latitude] [float] NOT NULL,
    	[longitude] [float] NOT NULL,
    	[date] [datetime] NOT NULL,
    	[speed] [float] NULL,
    	[imei] [varchar](32) NULL,
    	[tour] [int] NULL,
     CONSTRAINT [PK_GPSTrace] PRIMARY KEY CLUSTERED 
    (
    	[id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    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
    CREATE PROCEDURE [dbo].[spLastActivity] 
    	-- Add the parameters for the stored procedure here
    	@pointQuantity int = 50
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
        -- Insert statements for procedure here
        SELECT
       ID,
       latitude,
       longitude,
       date,
       speed,
       imei,
       Vehicle.ChauffeurID,
       '('+CAST(Vehicle.ChauffeurID as VarChar)+')-'+CH.naam AS ChauffeurName,
       tour
    FROM (SELECT
          ROW_NUMBER() OVER ( PARTITION BY IMEI ORDER BY Date DESC ) AS 'RowNumber',
          ID,
          latitude,
          longitude,
          date,
          speed,
          imei,
          tour
      FROM [bcTracking].[dbo].[GPSTrace]
    	) dt
     LEFT JOIN GPSDevice ON GPSDevice.DeviceSN = dt.imei 
     LEFT JOIN Vehicle ON Vehicle.DeviceID = GPSDevice.pkId 
     LEFT OUTER JOIN Chauffeurs CH ON Vehicle.ChauffeurID=CH.chauffeurID
    WHERE RowNumber <= @pointQuantity
    END

  4. #4
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Est il possible de sortir le scrip de creation des index d'un coup aves SSMS ?
    Tu peux utiliser la fenêtre d'explorateurs d'objets - détails > sélectionner tous tes index > clic droit et créer le script de création

    ++

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci MikeDavem

    EN SSMS Xpress ca ne semble pas fonctionner, je peux ouvrir la liste index
    Faire un SCRIPT Index AS sur chaque index individuellement
    Mais je ne peux pas sélectionner tous les index

    Mais je trouve d'ailleurs bizare et dommage que l'extraction du script de creation de la table n'integre pas automatiquement la creation de chaque index !!

  6. #6
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Je n'ai pas de SQL Server Management Studio Express sous la main mais effectivement c'est possible que cela ne fonctionne pas.

    Cependant tu peux tout à fait générer le script d'une table et de ses index en passant par clic droit sur la base de données > Tâches > Générer un script, mais encore une fois je ne sais pas si cela fonctionne avec SSMSE ... à vérifier ...

    ++

Discussions similaires

  1. [SQLSERVER 2008R2]Over & Group By
    Par Parvus dans le forum Développement
    Réponses: 5
    Dernier message: 27/06/2012, 13h23
  2. Top n per group
    Par Wisefool dans le forum Développement
    Réponses: 3
    Dernier message: 16/10/2009, 15h56
  3. [CR XI] Tri de groupes - faire un top 5
    Par Johnny_boy_72 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 14/04/2009, 18h50
  4. Top Group By : Optimisation
    Par Baquardie dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/05/2008, 20h54

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