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 :

Purge en fonction d'un nombre de tuples


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut Purge en fonction d'un nombre de tuples
    Bonjour,

    SGBD : SQL SERVER EXPRESS 2005

    J'ai une table qui contient des données de tests effectués sur des appareils de mesure. Cette table contient un champ DateTime pour pouvoir les trier par date. J'aimerais faire une fonction qui me purge les tests, et me garde que les X derniers tests.

    Est-ce qu'il existe une requête SQL pour faire ça où je dois passer par une boucle dans une procédure stockée?

    Merci d'avance !

  2. #2
    Scorpi0
    Invité(e)
    Par défaut
    Bonjour,

    Top devrait t'aider, c'est l'équivalent du LIMIT de mySQL

    Un truc de se gout la devrait un peu près marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    delete
    from myTable
    where DateTime <
                    (
                        SELECT MIN(DateTime)
                        FROM 
                        (
                           SELECT TOP X DateTime 
                           from myTable
                           ORDER BY DateTime DESC
                        )
                    )

  3. #3
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    @Scorpi0 :
    Le problème ce que l'on ne connait pas le nombre d'enregistrement... En faisant un TOP 10 par exemple, s'il existe 9 lignes dans la table et que l'on veut garder les 5 dernières, il faut retoucher le code...

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  4. #4
    Scorpi0
    Invité(e)
    Par défaut
    Je suis juste parti de l'hypothèse "garder que les X derniers tests", à partir de là, si X est supérieur aux nombres de lignes de la table, faut revoir l'hypothèse

  5. #5
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    Merci de vos réponses !

    En effet, il se peut que l'utilisateur spécifie qu'il ne veut garder que les 500 derniers tests, alors que la table n'en contienne que 200.

    J'ai vu dans la doc de Transact-SQL qu'il existe quelque chose comme DELETE TOP. Etant donné que je penses passer par une procédure stockée, je peux au préalable, récupérer le nombre de tests total, et faire la différence. Par contre j'ai toujours un peu de peine dans la requête SQL...

    Voici mon ébauche de procédure stockée :

    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
     
    ALTER PROCEDURE [dbo].[_Test_Purge]
    	-- Add the parameters for the stored procedure here
    	@_maxTestsCount INT,
            @_iRowCount INT OUTPUT
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
        -- Insert statements for procedure here
    	DECLARE @l_iTestsCount int;
    	DECLARE @l_iTestsCountToDelete int;
     
            SET @l_iTestsCount = (SELECT COUNT(Id) FROM Test)Name=@_sBarimetreName)
            SET @l_iTestsCountToDelete = @l_iTestsCount - @_maxTestsCount
     
      IF @l_iTestsCountToDelete > 0
        BEGIN
          --Requête de suppression
          ???
          SET @_iRowCount = @@rowcount;
        END
      ELSE
        SET @_iRowCount = 0;
      END

  6. #6
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    Voici mes essais. La première requête fonctionne, mais la deuxième pas. Pourquoi?

    Merci d'avance...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    --SELECT TOP(2) DateTime FROM Test ORDER BY DateTime ASC
    SELECT MAX(DateTime) FROM
      (
        SELECT TOP(2) DateTime FROM Test ORDER BY DateTime ASC
      )
    /*DELETE FROM Test WHERE DateTime <
    (
      SELECT MAX(DateTime) FROM
      (
        SELECT TOP(2) DateTime FROM Test ORDER BY DateTime ASC
      )
    )*/

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

Discussions similaires

  1. [AC-2002] Problème sur la Fonction Sum() qui est multipliée par le nombre de tuple
    Par b3rz3k dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 20/05/2011, 15h13
  2. Réponses: 3
    Dernier message: 05/09/2006, 00h47
  3. Réponses: 6
    Dernier message: 10/08/2005, 11h36
  4. Vitesse et grand nombre de tuples...
    Par TitiFr dans le forum Bases de données
    Réponses: 9
    Dernier message: 07/07/2005, 14h04
  5. Nombre de tuples apres requete
    Par afan dans le forum MFC
    Réponses: 4
    Dernier message: 19/03/2004, 12h02

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