2010-04-18 9 views
1

J'ai une base de données (SQL Server) avec une table nommée 'ProcessData' et des colonnes nommées 'Process_Name' (Type de données: nvarchar (50)), 'Start_At' (DataType: DateTime) et 'End_At' (Type de données: DateTime). J'ai besoin de savoir pour chaque 'intervalle de temps' (disons 1 seconde) combien de processus (Process_Name = PN) était ouvert (après ou égal à la colonne 'Start_at' et avant ou égal à 'End_At' colonne) pendant ce temps (Il peut s'agir de quelques lignes avec les mêmes données).Aide de requête SQL Server Database

Est-ce que quelqu'un sait comment faire cette requête?

Un grand merci,

Répondre

0

Pour tout intervalle, vous voulez juste quelque chose comme:

SELECT COUNT(1) 
FROM ProcessData row 
WHERE (row.Start_At >= @start AND row.Start_At < @end) -- starts in interval 
OR (row.End_At >= @start AND row.End_At < @end) -- ends in interval 
OR (row.Start_At < @start AND row.End_at >= @end) -- spans interval 

(vous n'avez pas à vous soucier de « tout à fait dans cet intervalle », car « commence dans » et "se termine par" couvre cela)

note Je suppose que @start est inclusif et @end est exclusif, ce qui est une façon assez courante de le faire (éviter de compter deux fois sur les limites, etc) - mais n'hésitez pas ajouter/supprimer quelques = sur les inégalités. Par exemple, pour inclure les deux extrémités:

SELECT COUNT(1) 
FROM ProcessData row 
WHERE (row.Start_At >= @start AND row.Start_At <= @end) -- starts in interval 
OR (row.End_At >= @start AND row.End_At <= @end) -- ends in interval 
OR (row.Start_At < @start AND row.End_at > @end) -- spans interval 
+0

Oui, c'est ce que j'ai fait. mais je veux une requête qui va promouvoir le 'Time-Interval' par ITSELF. Et à la suite d'obtenir une table avec des colonnes de remorquage, un pour chaque fois, et le second avec combien de processus ouverts était ouvert pendant ce temps. – menacheb

+0

Avez-vous une liste des intervalles de temps? Peut-être un UDF ou CTE? –

+0

Non, je veux commencer par (par exemple: 2010/04/17 00:00:00) et vérifier à partir de cette date chaque seconde combien de processus a été ouvert jusqu'à (par exemple: 2010/04/18 00:00:00). – menacheb