webForumDet fria alternativet

hjälp med en fråga, distinct eller group?

Databaser & SQL

5 svar · 455 visningar · startad av Thomasa

Medlem sedan aug. 2002351 inlägg
Frågan#1

Jag försöker få till en select från en tabell som jag har.
Den innehåller en kolumn med ett timestamp och en med ett namn (textsträng).

Tiderna är helt unika, men det finns t ex fem st som heter "Lopp nr 1 Herrar" med olika tider. Jag skulle vilja ha en fråga där jag får ut den tidigaste tiden för alla Lopp nr 1 Herrar, och grupperat/unikt på namnet.

Alltså i DBn:
Namn: Lopp nr 1 Herrar Tid: 0900
Namn: Lopp nr 1 Herrar Tid: 0903
Namn: Lopp nr 1 Herrar Tid: 0905
Namn: Lopp nr 1 Herrar Tid: 0907
Namn: Lopp nr 1 Herrar Tid: 0909
Namn: Lopp nr 2 Damer Tid: 0915
Namn: Lopp nr 2 Damer Tid: 0917
Namn: Lopp nr 2 Damer Tid: 0919

Jag vill att min SQL hämtar
Lopp nr 1 Herrar, 0900
Lopp nr 1 Damer, 0915

tacksam för hjälp :)

Medlem sedan aug. 2002351 inlägg
#2

såhär heter de:

SELECT HeatName, starttid FROM ERT_Save_Heat
Medlem sedan mars 20034 471 inlägg
#3

I ditt fall vill du använda GROUP BY. Varför? Jo för ett visst värde på HeatName vill du ha ut det minsta tidsvärdet. För att avgöra vad som är minst måste du jämföra alla med samma HeatName (alltså gruppera på detta).

SELECT HeatName, MIN(starttid) [FirstHeat] 
FROM ERT_Save_Heat
GROUP BY HeatName

----
DISTINCT används för att sålla bort dubbletter, säg att du vill visa alla HeatNames en gång:

SELECT DISTINCT HeatName 
FROM ERT_Save_Heat

skriver ut från ditt exempel:

Lopp nr 1 Herrar
Lopp nr 2 Damer

Medlem sedan aug. 2002351 inlägg
#4
SELECT HeatName, MIN(starttid) as FirstHeat FROM ERT_Save_Heat WHERE day(starttid) = 12 GROUP BY HeatName

Lysande, hade velat ha dem sorterade efter starttid, men den smäller när jag lägger in en order by starttid, tips?

Medlem sedan mars 20034 471 inlägg
#5

Thomasa skrev:

Lysande, hade velat ha dem sorterade efter starttid, men den smäller när jag lägger in en order by starttid, tips?

Du måste sortera på något som faktiskt kommer ut vid GROUP BY. Alltså de flesta starttider är ju inte minst. Så:

SELECT HeatName, MIN(starttid) as FirstHeat 
FROM ERT_Save_Heat 
WHERE day(starttid) = 12 
GROUP BY HeatName
ORDER BY MIN(starttid)

Borde fungera.

Medlem sedan aug. 2002351 inlägg
#6

stort tack!

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)