select projectid, count(*) from tabell group by projectid
Vill du ha med startdate och stopdate så måste du bestämma vilken rads start- och stoppdatum i varje grupp som skall visas, t.ex. den rad som har det högsta statusvärdet.
Databaser & SQLur Databashanterare & SQL
8 svar · 821 visningar · startad av Sjodahl
Skulle vilja ha en typ DISTINCT på första kolumnen, och sedan räkna hur många Status Id det finns för varje.
ProblemId StatusId StartDate StopDate
3 2 2010-11-11 06:53:45.767 NULL
4 1 2010-11-11 06:46:05.893 NULL
5 1 2010-11-16 21:04:17.380 NULL
6 4 2010-11-11 07:08:23.060 NULL
7 1 2010-11-11 09:07:37.303 NULL
15 1 2010-11-23 06:26:37.703 2010-11-23 06:28:40.363
15 2 2010-11-23 06:28:40.350 2010-11-23 06:30:16.743
15 3 2010-11-23 06:30:16.727 2010-11-25 06:26:49.897
15 4 2010-11-25 06:26:49.867 NULL
16 1 2010-11-23 06:31:24.807 2010-11-23 06:31:58.433
16 2 2010-11-23 06:31:58.433 2010-11-23 06:34:07.030
16 3 2010-11-23 06:34:07.017 2010-11-23 06:37:04.413
16 4 2010-11-23 06:37:04.397 NULL
17 1 2010-11-23 17:37:30.147 2010-11-23 17:38:14.690
17 3 2010-11-23 17:38:14.630 NULL
select projectid, count(*) from tabell group by projectid
Vill du ha med startdate och stopdate så måste du bestämma vilken rads start- och stoppdatum i varje grupp som skall visas, t.ex. den rad som har det högsta statusvärdet.
Det jag kommer att gör är att skicka in 2st parametrar @StartDate, @StopDate
Kommer vilja ha ut hur många det är av varje StatusId för just det intervallet, men MAX 1st status för varje ProjectId
Så den rad som jag vill skall visas är den med senast StopDate eller om StopDate == NULL.
Hur bestämmer jag vilken rad som skall visas? Vill den med högst StartDate skall visas bara.
select ProblemId,
StatusId,
StartDate,
StopDate
from t as q
where stopDate is null
or stopDate in (select max(stopDate)
from t
where t.statusid = q.statusid)
Tackar, men får inte riktigt ihop det vill även baka in 2st parametrar där resultet skall ligga emellan start och stopdate.
select ProblemId,
StatusId,
StartDate,
StopDate
from dbo.tblProblemLog as q
where ProjectId=151 AND
(StartDate <= '2010-11-28' AND (StopDate >= '2010-11-22' OR StopDate IS NULL
or stopDate in (select max(stopDate)
from dbo.tblProblemLog
where dbo.tblProblemLog.statusid = q.statusid)))
Med ovanstående får jag med lite mer än jag borde.
Skulle inte denna fungera?
select ProblemId, StatusId, max(StopDate)
from wf_sjodahl
where StartDate <= '2010-11-28' AND (StopDate >= '2010-11-22' OR StopDate IS NULL )
group by ProblemId;
/red: lite förvillande info du ger :) Ena stunden den med senaste stopdate nästa den med högsta startdate, och nu i senaste exemplet har du med ProjectId, var kommer den ifrån.
Hej,
Det är så sant,
För att försöka förtydliga det så är mina in-parametrar är:
@ProjectId
@StartDate
@StopDate.
Det resultat jag är ute efter är följande:
Antalet StatusId för varje status mellan tids parametrarna @StartDate och @StopDate och som har ett ProjektId enligt @ProjectId.
Men för varje ProblemId så skall den bara ta med endast EN status i den perioden och det skall vara den senaste: Högst StopDate eller om StopDate = null så är den störst.
StatusId, Antal
1, 34
2, 3
3, 32
4, 21
:OO