webForumDet fria alternativet

SQL DISTINCT ?

8 svar · 821 visningar · startad av Sjodahl

SjodahlMedlem sedan maj 20033 218 inlägg
#1

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

Peter SMedlem sedan dec. 20025 483 inlägg
#2
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.

SjodahlMedlem sedan maj 20033 218 inlägg
#3

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.

SjodahlMedlem sedan maj 20033 218 inlägg
#4

Hur bestämmer jag vilken rad som skall visas? Vill den med högst StartDate skall visas bara.

LarsGMedlem sedan dec. 200012 464 inlägg
#5
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)
SjodahlMedlem sedan maj 20033 218 inlägg
#6

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)))
SjodahlMedlem sedan maj 20033 218 inlägg
#7

Med ovanstående får jag med lite mer än jag borde.

GunnarDMedlem sedan juni 20014 290 inlägg
#8

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.

SjodahlMedlem sedan maj 20033 218 inlägg
#9

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

126 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)