MSQL2008 / Extraire autour de chaque lignes recherchées.
Résolu/Fermé
HappyCulteur28
Messages postés
5
Date d'inscription
lundi 24 octobre 2016
Statut
Membre
Dernière intervention
24 octobre 2016
-
24 oct. 2016 à 11:35
HappyCulteur28 Messages postés 5 Date d'inscription lundi 24 octobre 2016 Statut Membre Dernière intervention 24 octobre 2016 - 24 oct. 2016 à 15:08
HappyCulteur28 Messages postés 5 Date d'inscription lundi 24 octobre 2016 Statut Membre Dernière intervention 24 octobre 2016 - 24 oct. 2016 à 15:08
A voir également:
- MSQL2008 / Extraire autour de chaque lignes recherchées.
- Extraire video youtube - Guide
- Extraire son video - Guide
- Extraire image pdf - Guide
- Extraire rar - Guide
- Site de vente en ligne particulier - Guide
3 réponses
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié par Reivax962 le 24/10/2016 à 14:12
Modifié par Reivax962 le 24/10/2016 à 14:12
Bonjour,
Tu peux tenter une requête de ce genre :
Le DISTINCT permet d'éviter les doublons, qui arriveront si deux anomalies sont trop rapprochées dans le temps.
Tu remplaces bien sûr table par le nom de ta table, et la clause WHERE par la condition qui te permet d'identifier un message d'anomalie.
Un bémol quand même, en termes de perf ce ne sera sans doute pas trop ça... Un index sur DateTime pourra s'avérer nécessaire, peut-être aussi sur ta condition de recherche des anomalies.
Xavier
PS : Là j'ai mis 5 minutes avant et après, tu mets bien sûr ce que tu veux.
La syntaxe de DATEADD est là : https://docs.microsoft.com/fr-fr/sql/t-sql/functions/dateadd-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15
Tu peux tenter une requête de ce genre :
SELECT DISTINCT t2.* FROM table t1 INNER JOIN table t2 ON t2.DateTime BETWEEN DATEADD(MINUTE, -5, t1.DateTime) AND DATEADD(MINUTE, 5, t1.DateTime) WHERE t1.text1 = 'Message anomalie'
Le DISTINCT permet d'éviter les doublons, qui arriveront si deux anomalies sont trop rapprochées dans le temps.
Tu remplaces bien sûr table par le nom de ta table, et la clause WHERE par la condition qui te permet d'identifier un message d'anomalie.
Un bémol quand même, en termes de perf ce ne sera sans doute pas trop ça... Un index sur DateTime pourra s'avérer nécessaire, peut-être aussi sur ta condition de recherche des anomalies.
Xavier
PS : Là j'ai mis 5 minutes avant et après, tu mets bien sûr ce que tu veux.
La syntaxe de DATEADD est là : https://docs.microsoft.com/fr-fr/sql/t-sql/functions/dateadd-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15
HappyCulteur28
Messages postés
5
Date d'inscription
lundi 24 octobre 2016
Statut
Membre
Dernière intervention
24 octobre 2016
24 oct. 2016 à 14:49
24 oct. 2016 à 14:49
Bon.
J'ai trouvé cela .
Reste à voir si vous avez mieux .
Coté perf, je sais pas si cela est efficace .
David.
J'ai trouvé cela .
Reste à voir si vous avez mieux .
select distinct(convert(nvarchar,a.datetime,121) + Text1) ,a.DateTime ,a.text1 ,b.Before ,b.Post from algviewExFra a, ( select DATEADD(minute,-1, DateTime) as [Before], DATEADD(minute,1, DateTime) as [Post] from MyTable where text1='Message Anomalie' ) b where a.Datetime>=b.Before and a.DateTime<=b.Post
Coté perf, je sais pas si cela est efficace .
David.
HappyCulteur28
Messages postés
5
Date d'inscription
lundi 24 octobre 2016
Statut
Membre
Dernière intervention
24 octobre 2016
24 oct. 2016 à 15:08
24 oct. 2016 à 15:08
Voici donc, avec la solution efficace de xavier :
Merci encore Xavier.
SELECT DISTINCT (convert(nvarchar,T2.datetime,121) + T2.Text1) ,T2.DateTime ,T2.text1 FROM MyTable t1 INNER JOIN MyTable t2 ON t2.DateTime BETWEEN DATEADD(MINUTE, -1, t1.DateTime) AND DATEADD(MINUTE, 1, t1.DateTime) WHERE t1.text1 = 'Message Anomaie'
Merci encore Xavier.
24 oct. 2016 à 14:51
Je vais faire un comparatif perf , et reviens vers toi.
24 oct. 2016 à 15:06
Ta version, s'execute en 2 secondes ce qui est performant , MAIS ne retourne pas les bonnes choses.
Il manque des lignes ,notamment au début.
Je pense que cela provient du fait que j'ai plusieurs evenements avec le meme datetime.
J'ai fait un distinct sur DATETIME + Text1 .
Execution en moins d'une seconde.
Y a pas besoin de photo finish ! :)
MERCI Beaucoup.
David.