Accueil > Forum > > > > Comparaison/calcul ligne par ligne dans une même colonne d'une même table
Comparaison/calcul ligne par ligne dans une même colonne d'une même table
jeudi 13 août 2009 à 10:17:01 |
Comparaison/calcul ligne par ligne dans une même colonne d'une même table

nordine001
|
Bonjour,
Afin de savoir si un service fonctionne, chaque action est enregistrée dans une table. Cette dernière n'a pas d'id autoincrémenté.
Pour chaque entrée, j'ai la date dans ce format datetime avec d'autres valeurs.
Le but est de m'assurer qu'entre 2 enregistrements (2 lignes consécutives) il ne s'est pas écoulé plus de ...
Une autre vision serait de récupérer le temps écoulé entre 2 enregistrements.
Exemple avec des valeurs.
Appelons la table "statitique" et la colonne "temps_synchro"
1° Je dois effectuer un select de "temps_synchro" avec un "order by" sur ce champ pour m'assurer que tous les temps sont croissants ou décroissants
L1 01-01-2009 08:05:32:000
L2 01-01-2009 08:05:35:000
L3 01-01-2009 08:05:37:000
L4 01-01-2009 08:06:27:000
...
2° Le but est de récupérer ceci par exemple
00:00:03:000 -->(L2-L1)
00:00:02:000 -->(L3-L2)
00:00:50:000 -->(L4-L3)
...
Pour info la table contient des centaines de millers de ligne
J'ai essayé d'utiliser le row_number(), count, ... mais pas moyen de trouver la solution. Je me suis orienter à défaut vers une comparairon des ligne pair et impair mais c'est incorrect.
Je ne vois pas comment effectuer une boucle dans sql pour effectuer cette tâche.
Je vois cela une boucle itérative avec 3 valeurs LigneA et LigneB et resultat
Dans la boucle, on effectue LigneA+i-LigneB+i=resultat (Qui m'intéresse )
i étant l'incrément allant de i=0 jusque i= count de toutes les lignes avec un pas de 1
On initialise ligneA comme étant la ligne2 et LigneB comme ligne1 et ensuite il faut incrémenter de i+1 ou i++
Donc au 1er passage j'ai bien Ligne2-ligne1
Ensuite ligne3-ligne2
...
Il faut également afficher le résultat de chaque étape forcément. Enfin dans ma tête c'est clair mais j'arrive pas à restranscrire.
J'ai lu pas mal de chose concernant le "cursor" mais je ne connais pas du tout son mode de fonctionne. J'ai essayé certaine chose mais je n'arrive pas à l'appliquer à mon cas. Je place ma question dans "requêtes" même s'il est probable qu'on aboutisse à des procédures stockées.
Merci d'avance pour votre aide, vos remarques, idées,...
Nordine001
|
|
vendredi 14 août 2009 à 12:26:24 |
Re : Comparaison/calcul ligne par ligne dans une même colonne d'une même table

nivsql
|
Réponse acceptée !
J'ai trouver une solution a ton probleme.
Contexte : J'ai créé une table MyDateChrono composé uniquement d'un champ date que j'ai alimenté via la fonction GETDATE() repeter plusieurs fois.
Voila ce que je te propose comme solution :
WITH MyChrono (Mychron, chron_id) as (
select Mydate, ROW_NUMBER() OVER(ORDER BY Mydate DESC) from MydateChrono
)
SELECT a.Mychron - b.Mychron
from MyChrono a
join MyChrono b On a.chron_id = b.chron_id - 1
|
|
vendredi 14 août 2009 à 12:28:37 |
Re : Comparaison/calcul ligne par ligne dans une même colonne d'une même table

nivsql
|
Il vas de soit que si ta propre table possede une Clé primaire de type autoincrément (colonne IDENTITY) et qu'elle respecte l'ordre voulu pour tes date tu peut directement faire l'autojointure sur ta clé primaire au lieu de l'émuler comme je l'ai fait via ROW_NUMBER dans une CTE.
|
|
lundi 17 août 2009 à 08:55:13 |
Re : Comparaison/calcul ligne par ligne dans une même colonne d'une même table

nordine001
|
Réponse acceptée !
Merci pour la réponse rapide.
De mon côté, j'ai effectué ceci :
declare @V1 datetime
declare @V2 datetime
declare @V datetime
declare @R int
DECLARE @T TABLE (Elapse_time datetime)
set @V= 0
set @R= 0
WHILE @R < (select count (synchrodate) AS TEST from T3)
begin
set @V1= (select synchrodate
from (select synchrodate,ROW_NUMBER() OVER(ORDER BY synchrodate ASC) AS rank from t3) AS P where rank = @R+1)
set @V2= (select synchrodate
from (select synchrodate,ROW_NUMBER() OVER(ORDER BY synchrodate ASC) AS rank from t3) AS P where rank = @R+2)
INSERT INTO @T VALUES (@V)
SET @R = @R + 1
SET @V= @V2 - @V1
end
select * from @T
Je vais également tester ta solution et prendrai la plus rapide des 2.
Encore merci.
|
|
lundi 17 août 2009 à 10:21:20 |
Re : Comparaison/calcul ligne par ligne dans une même colonne d'une même table

nivsql
|
J'ai bien peur que ta solution soit totalement contre performante au fur et a mesure de l'augmentation du volume.
Imagine : pour chaque tour dans ta boucle tu lis INTEGRALEMENT ta table 3 FOIS ! Convertis ca en Ko de lecture mémoire pour un certain nombre de lignes et tu verra le probleme (imagine une table de 1 Mo pour 100 ligne, tu lira quasi 300 Mo de données mémoire alors que finalement tu n'a qu'un 1Mo de données).
|
|
Cette discussion est classée dans : ligne, table, temps, colonne, valeurs
Répondre à ce message
Sujets en rapport avec ce message
Entrer des valeurs différentes dans une colonne [ par DjanGoJack ]
Bonjour a tous,Ma base de données sql regroupe tous les patients d'un hopital et tous les examens qu'ils ont eus.Je dispose d'une table sql nommé ANTE
duplication des lignes d'une table en fonction d'une valeur [ par ple2415 ]
Bonjour à tous,je souhaiterais dupliquer les lignes d'une table en fonction de la valeur contenue dans un des champs de cette table.exemple d'une lign
Requête select une ligne sur deux [ par Mayzz ]
Bonjour à tous,Voila, je fais un site en ASP.NET et j'ai une requête spécifique à faire.Je souhaiterai faire une requête select dans un dataset (Table
créer table avec plusieur clés etrangérs en sql server 2005 [ par amal2008 ]
Bonjour, je veux faire une requete de create table en sql server 2005 , avec tous les contrainres et types des champs,le probléme c'est qu il m'accept
suppression de plusieurs lignes en meme temps [ par atino ]
Bonjour je voudrai supprimer toutes les lignes d'une table commençant par une meme lettre DELETE FROM [nom de la table] WHERE [nom de la colonne] =
Union de 2 colone [ par soupiste ]
Bonjour à la communauté ! J'ai dans une table ADJACENT de 2 colonne ayant des lignes différentes : -la colonne A contient des valeurs TOTO, TATA, X22
requête update avec select [ par bies ]
Bonjour!!! besoin d'aide car çà fait des heures que je suis sur cette requête Au départ, j'ai ma table1 dont un extrait ci dessous. dans cette table,
Date de modification des données d'une table [ par demonsurf ]
Bonjour à tous. J'explique mon problème : j'ai besoin de pouvoir contrôler la date de la dernière modification des tables de ma BDD. Je fais déjà un
LOAD DATA LOCAL INFILE insert que certaines colonnes [ par ericsandrine ]
bonjour j'ai un fichier csv avec 10 colonnes et ma table n'a que 3 colonnes peut on faire un LOAD DATA LOCAL INFILE en ne récupérant que certaines
Requête avec UNION mais une seule ligne / groupe [ par tommy_red_card ]
Je dois dans la même ligne avec un montant avec une restriction et le même sans restriction. J'ai une table avec les champs Type, Montant, semaine. Je
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|