webForumDet fria alternativet

Ta bort varannan rad ur resultatet?

Databaser & SQLur Databashanterare & SQL

2 svar · 553 visningar · startad av Compusa

CompusaMedlem sedan jan. 20023 327 inlägg
#1

DBMS: SQL Server 2005 (gärna stöd för 2000)

Så här ser min SQL-fråga ut:

SELECT UppdragStatusTypId, id
FROM UppdragsStatus US
WHERE EXISTS
(
	SELECT UppdragsId, UppdragStatusTypId, Datum, UppdateradDatumTid
	FROM uppdragsstatus
	GROUP BY UppdragsId, UppdragStatusTypId, Datum, UppdateradDatumTid
	having count(*) > 1 
	AND Datum IS NOT NULL
	AND UppdragsId = US.UppdragsId
	AND UppdragStatusTypId = US.UppdragStatusTypId
	AND Datum = US.Datum
	AND UppdateradDatumTid = US.UppdateradDatumTid
)

Får ut resultat från en SQL fråga som ser ut så här

StatusId Id
1. 5 21154
2. 5 21730
3. 6 21155
4. 6 21731
5. 7 21156
6. 7 21732

Skulle på något sätt bara vilja få ut raderna 2, 4 och 6, då de är dubbletter som jag ska ta bort. Men jag vill inte att min sql-fråga ska ta bort raderna 1, 3 och 5... Det sambandet som finns är att rad 2, 4 och 6 har högre id än sina orginal (1, 3, 5).

Är det möjligt?

Peter SMedlem sedan dec. 20025 483 inlägg
#2
SELECT UppdragStatusTypId, max(id)
FROM UppdragsStatus US
WHERE EXISTS
(
	SELECT UppdragsId, UppdragStatusTypId, Datum, UppdateradDatumTid
	FROM uppdragsstatus
	GROUP BY UppdragsId, UppdragStatusTypId, Datum, UppdateradDatumTid
	having count(*) > 1 
	AND Datum IS NOT NULL
	AND UppdragsId = US.UppdragsId
	AND UppdragStatusTypId = US.UppdragStatusTypId
	AND Datum = US.Datum
	AND UppdateradDatumTid = US.UppdateradDatumTid
)
group by UppdragStatusTypId
CompusaMedlem sedan jan. 20023 327 inlägg
#3

Så där skulle det se ut ja! Var och nosade på "max" men fick det inte att fungera. Stort tack!

Naturligtvis hann jag lösa det på ett annat vis också . Har inte bestämt mig ännu vilken jag ska köra på men det ger hur som helst samma resultat ;)

SELECT US2.UppdragStatusTypId, US2.Id
FROM uppdragsstatus US1
INNER JOIN uppdragsstatus US2 ON
US1.UppdragsId = US2.UppdragsId
AND US1.UppdragStatusTypId = US2.UppdragStatusTypId
AND US1.Datum = US2.Datum
AND US1.UppdateradDatumTid = US2.UppdateradDatumTid
AND (US1.Id <> US2.Id AND US1.Id < US2.Id)

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