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 :

Sélection avec TOP(1)


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut Sélection avec TOP(1)
    salut à toute la communauté.
    J'ai un gros souci en sql server et je vous supplie de m'aider s'il y a un moyen :

    J'ai une table [dbo].[MVT_TRANSFERT]
    ([ID_AUTO], [DATEOP], [ID_SIM], [STK_ANCIEN], [STK_ENTREE], [STK_SORTIE], [STK_FINAL], [REF_MVT], [OBSERVATION], [LOGINPAS], [IS_ANNULER],[TypeSIM])

    qui reçoit les mouvement d'entrées et sorties de 10 sims (ID_SIM)

    Mon souci c'est de récupérer et afficher la dernière ligne du mouvement
    de chacun de de 10 sims.

    voici ce que j'ai fait mais ça ne marche pas.

    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
     
    USE [MSELLER]
    GO
    /****** Object:  StoredProcedure [dbo].[STOCK_DISPONIBLE_EVD]    Script Date: 10/04/2013 09:09:39 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
      ALTER PROCEDURE [dbo].[STOCK_DISPONIBLE_EVD]
      --@Ids int,
      --@Tsim varchar(5)
      AS
      SET NOCOUNT ON
     
      SELECT Top(1) [ID_AUTO], [DATEOP], [ID_SIM], [STK_ANCIEN], [STK_ENTREE], [STK_SORTIE], [STK_FINAL], [REF_MVT], [OBSERVATION], [LOGINPAS], [IS_ANNULER],[TypeSIM]
      FROM [dbo].[MVT_TRANSFERT]
      WHERE [dbo].[MVT_TRANSFERT].[ID_SIM] IN  (SELECT ID_AUTO FROM [dbo].[SIM]) and [dbo].[MVT_TRANSFERT].[TypeSIM]= 'VM'
      GROUP BY [ID_AUTO], [DATEOP], [ID_SIM], [STK_ANCIEN], [STK_ENTREE], [STK_SORTIE], [STK_FINAL], [REF_MVT], [OBSERVATION], [LOGINPAS], [IS_ANNULER],[TypeSIM]
      ORDER BY [dbo].[MVT_TRANSFERT].[ID_AUTO] desc
     
    CREATE TABLE #TEMPTAB(int ID_SIM, decimal STK_FINAL)
     
    	INSERT #TEMPTAB (ID_SIM)
    	(SELECT ID_AUTO FROM [dbo].[SIM])
     
    	UPDATE #TEMPTAB 
    	SET STK_FINAL = (SELECT Top(1) [STK_FINAL] 
      FROM [dbo].[MVT_TRANSFERT]
      WHERE [dbo].[MVT_TRANSFERT].[ID_SIM] = 33)
     
     
      SELECT * FROM #TEMPTAB
    Merci de m'aider.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 216
    Points : 12 812
    Points
    12 812
    Par défaut
    Bonjour,
    Ce genre de demande revient assez souvent sur ce forum.
    Allez, je te donne une piste: le dernier, c'est celui pour lequel il n'y en a pas d'autre avec une date ultérieure (et ici le même Id_Dim).
    Une petite recherche te donnera la solution

    Tatayo.

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    il y a aussi les fonctions de fenetrage qui évitent une sous requete

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par punkoff Voir le message
    il y a aussi les fonctions de fenetrage qui évitent une sous requete
    Merci,
    mais pas bien compris

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Ce genre de demande revient assez souvent sur ce forum.
    Allez, je te donne une piste: le dernier, c'est celui pour lequel il n'y en a pas d'autre avec une date ultérieure (et ici le même Id_Dim).
    Une petite recherche te donnera la solution

    Tatayo.
    Merci beaucoup, j'arrive à faire pour une seule ligne (id_sim) mais c'est pour les 10 que je n'arrive pas

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 216
    Points : 12 812
    Points
    12 812
    Par défaut
    On peut se passer d'une sous-requête, en utilisant une jointure.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select t1.*
    from LaTable t1
    left outer join LaTable t2 on T1.idx = t2.Idx and t1.Coldate < t2.Coldate
    where t2.Id is null

    Tatayo.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Merci M. tatayo,
    je vais essayé et venir vous informer.

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par tatayo Voir le message
    On peut se passer d'une sous-requête, en utilisant une jointure.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select t1.*
    from LaTable t1
    left outer join LaTable t2 on T1.idx = t2.Idx and t1.Coldate < t2.Coldate
    where t2.Id is null

    Tatayo.
    Salut M. Tatayo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT top (1) *
    FROM MVT_TRANSFERT 
    LEFT OUTER JOIN SIM  ON MVT_TRANSFERT.ID_SIM = SIM.ID_AUTO 
    WHERE SIM.ID_AUTO IS NULL
    La requête me renvoi la dernière ligne de la table t1. Au fait je veux avoir le top de toutes les ligne de la table SIM qui sont dans la table 2.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 216
    Points : 12 812
    Points
    12 812
    Par défaut
    Bonjour,
    Avec un TOP 1, il est normal que la requête ne renvoie qu'une seul ligne...
    Qui plus est, telle qu'elle est écrite la requête renvoie tous les mvt_transfert non liés à un (une ?) SIM.
    Ici il faut faire 2 jointures:
    Une jointure interne entre MVT_TRANSFERT et SIM (S1)
    Une jointure externe entre MVT_TRANSFERT et SIM (S2), avec un critère supplémentaire sur la date (s1.date < s2.date), puis dans la clause where ajouter la restriction s2.id is null

    Tatayo.

Discussions similaires

  1. [JTree] Sélection avec clic droit ?
    Par Pill_S dans le forum Composants
    Réponses: 3
    Dernier message: 27/02/2009, 18h04
  2. Sélection avec la souris hors d'une application
    Par carlg dans le forum API, COM et SDKs
    Réponses: 17
    Dernier message: 08/03/2006, 10h02
  3. empecher la sélection avec une fonction
    Par crakocrako dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/03/2006, 13h29
  4. Rêquete de sélection avec des tables associative
    Par snoopy69 dans le forum Access
    Réponses: 2
    Dernier message: 20/02/2006, 15h31
  5. Pb sélection avec Champ vide
    Par Luffy Duck dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/10/2005, 12h11

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