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 :

[SQL 2005]faire une sorte d'historique


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 210
    Par défaut [SQL 2005]faire une sorte d'historique
    Bonjour,

    on a une table log de ce type :

    une date, une ip

    je voudrais pouvoir faire une Procédure Stockée qui en échange d'un nombre et d'une période, me renvoi des statistiques de connexion.

    Par exemple on donne 5 comme indice et Jour comme période et la PS nous renvoie 5 lignes avec le nb de connexion aujourd'hui, hier, avant hier etc... sur 5 jours.

    Je n'ai jamais fait ce genre de requète, pourriez-vous me mettre sur la voie ?

    merci

  2. #2
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 15
    Par défaut
    Voici une petite piste, à toi de le mettre en 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
    28
    29
    30
     
    create table dbo.testlog
    ( adip varchar(15),
    	datelog datetime)
     
     
    insert into dbo.testlog values ('11.11.11.11',getdate() )
    insert into dbo.testlog values ('11.11.11.11',getdate() )
    insert into dbo.testlog values ('11.11.11.11',getdate() )
    insert into dbo.testlog values ('11.11.11.11',dateadd(day,-1,getdate()) )
    insert into dbo.testlog values ('11.11.11.11',dateadd(day,-1,getdate()) )
    insert into dbo.testlog values ('11.11.11.11',dateadd(day,-2,getdate()) )
    insert into dbo.testlog values ('11.11.11.11',dateadd(day,-2,getdate()) )
     
    select * from testlog
     
    declare @param_nb integer, @param_periode varchar(10)
     
    set @param_periode = 'jour'
    set @param_nb = 3
     
    if  @param_periode = 'jour'
    begin
    	select count(*)
    	from testlog
    	where convert(datetime, left(convert(varchar(10),datelog,101),10)) 
    				> convert(datetime, left(convert(varchar(10),dateadd(day, -@param_nb, getdate()),101),10)) 
    	group by convert(datetime, left(convert(varchar(10),datelog,101),10))
    	order by convert(datetime, left(convert(varchar(10),datelog,101),10)) desc
    end
    Bon courage

  3. #3
    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 : 43
    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
    Par défaut
    Bonjour,

    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
    21
    22
    23
    24
    25
    26
     
    CREATE TABLE dbo.IPLog
    (
    	IP VARCHAR(16) NOT NULL,
    	LOGTIME DATETIME NOT NULL
    ); 
     
    INSERT INTO dbo.IPLog VALUES ('11.11.11.11',GETDATE())
    INSERT INTO dbo.IPLog VALUES ('11.11.11.11',GETDATE())
    INSERT INTO dbo.IPLog VALUES ('11.11.11.11',GETDATE())
    INSERT INTO dbo.IPLog VALUES ('11.11.11.11',DATEADD(DAY,-1,GETDATE()))
    INSERT INTO dbo.IPLog VALUES ('11.11.11.11',DATEADD(DAY,-1,GETDATE()))
    INSERT INTO dbo.IPLog VALUES ('11.11.11.11',DATEADD(DAY,-2,GETDATE()))
    INSERT INTO dbo.IPLog VALUES ('11.11.11.11',DATEADD(DAY,-2,GETDATE()))
     
    CREATE PROCEDURE sp_IPLog_GET
    	@_IP VARCHAR(16),
    	@_LOGTIME DATETIME,
    	@_NB_JOURS INT
    AS
    BEGIN
    	SELECT IP, LOGTIME
    	FROM dbo.IPLog
    	WHERE LOGTIME BETWEEN @_LOGTIME AND @_LOGTIME - @_NB_JOURS
    	AND IP = @_IP;
    END
    la table IPLog éventuellement avec une contrainte CHECK pour vérifier que tu as bien les 16 caractères d'une IP, ou encore mieux un trigger pour vérifier que tu n'as que des chiffres et les points là où il faut.
    Tu peux aussi mettre certains paramètres de la procédure stockée optionnels (valeur par défaut = NULL) pour par exemple voir toutes les IP qui sont passés pendant deux jours jusqu'à telle date.

    A+

Discussions similaires

  1. [SQL 2000] faire une sorte de pivot
    Par zooffy dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/11/2007, 09h53
  2. Réponses: 1
    Dernier message: 31/07/2007, 16h16
  3. [RegEx] faire une sorte de BBcode
    Par jexl dans le forum Langage
    Réponses: 3
    Dernier message: 05/06/2007, 00h14
  4. [SQL] Comment faire une procédure stockée
    Par PoichOU dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 28/05/2007, 21h58
  5. Petite question sur la façon de faire une sorte de thread
    Par bit_o dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 09/05/2007, 23h28

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