webForumDet fria alternativet

Distinct på 1 fält

Databaser & SQL

9 svar · 368 visningar · startad av Insider

Medlem sedan jan. 2000978 inlägg
Frågan#1

Jag har en tabell med ett slags ID, 'FNR'. Detta ID finns det dubletter av.

Jag vill visa alla fälten, men bara en rad för varje FNR. De andra fälten får det finnas dubletter av.

När jag kör nedanstående så sorteras bara rader bort där ALLA fälten är lika, och det lämnas flera rader med samma FNR.

SELECT DISTINCT FNR, PERSONNR, KORTNAMN, POSTNR, POSTORT
FROM TABELL;

Kan man inte använda distinct?

Medlem sedan mars 20007 896 inlägg
#2
SELET DISTINCT(FNR),PERSONNR...
Medlem sedan jan. 2000978 inlägg
#3

Nja, det verkar inte funka. Får fortfarande dubletter av FNR.
Jag kör Access 2000.

Medlem sedan dec. 200012 464 inlägg
#4

I och med att det finns flera möjliga val av värden från

PERSONNR, KORTNAMN, POSTNR, POSTORT

så måste man bestämma vilket av dessa man vill ha

minsta/största/slumpmässigt ?

Medlem sedan jan. 2000978 inlägg
#5

slumpmässigt

Medlem sedan dec. 200012 464 inlägg
#6
SELECT FNR, 
   first(PERSONNR),
   first( KORTNAMN), 
   first(POSTNR), 
   first(POSTORT)
FROM TABELL
group by fnr

Försök inte med detta i någon annan DBMS än Access.

Medlem sedan juni 2002151 inlägg
#7

finns det motsvarande i SQL Server??
Jag har en tabell där det finns många poster som hör till samma id, men där posterna har olika datum. Jag skulle vilja plocka ut alla id:n där DEN SENASTE uppfyller ett visst villkor.

:q

mvh p-type

Medlem sedan dec. 200012 464 inlägg
#8
select id,max(datum)
from t
group by id
having max(datum) < '1996-04-23'

Du får gärna delge lite mer detaljer angående

DEN SENASTE uppfyller ett visst villkor.

Medlem sedan juni 2002151 inlägg
#9

tack för svaret

med den senaste menar jag den post som har det senaste datumet.

det verkar fungera med

select id,max(datum)
from t
group by id
where (villkor)

:e

men med detta sätt går det inte att få ut även andra fält från tabellen i selectsatsen?

Medlem sedan dec. 200012 464 inlägg
#10
select id,datum <,....>
from t as q
where datum in (
   select max(datum) 
    from t 
  where t.id = q.id)
314 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
181 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)