MAX()

Databaser & SQL

4 svar · 340 visningar · startad av Uwe

Medlem sedan nov. 2003181 inlägg
Trådstart#1

Har problem med en fråga där jag försöker få fram ett resultat där endast det senaste värdet visas.

Tabeller

file
-------
fid  (int)
counts (int)

mode
-------
fid (int)
mid (int)
datetime (date)
mode (int)

Det jag har försökt med är typ såhär:

SELECT	F.fid, mode, max(datetime) as datum, counts
FROM file F, mode M
WHERE F.fid=m.fid AND DateTime BETWEEN '2000-01-01 00:00:00' AND '2006-01-01 00:00:00'
GROUP BY F.fid, mode, counts

När jag gör denna får jag ut flera poster för varje fid, det jag vill ha är endast den som har det senaste datumet. Går det att göra en sån fråga?

Medlem sedan okt. 20041 556 inlägg
#2

Ett fältnamn som heter datatime tycker jag låter suspekt.

SELECT Top 1 F.fid, mode, max(datetime) as datum, counts
FROM file F, mode M
WHERE F.fid=m.fid AND [DateTime] BETWEEN '2000-01-01 00:00:00' AND '2006-01-01 00:00:00'
GROUP BY F.fid, mode, counts ORDER BY [DateTime]

*Något åt det hållet.

BTW; uppge alltid vilken databas vi talar om eftersom att mySql använder limit istället för top.

Medlem sedan nov. 2003181 inlägg
#3

Travoni skrev:

Ett fältnamn som heter datatime tycker jag låter suspekt.

SELECT Top 1 F.fid, mode, max(datetime) as datum, counts
FROM file F, mode M
WHERE F.fid=m.fid AND [DateTime] BETWEEN '2000-01-01 00:00:00' AND '2006-01-01 00:00:00'
GROUP BY F.fid, mode, counts ORDER BY [DateTime]

*Något åt det hållet.

BTW; uppge alltid vilken databas vi talar om eftersom att mySql använder limit istället för top.

Databsen är SQL Server.

Jag var kanske lite otydlig. Det jag vill ha ut är inte bara ett svar, utan ett record per fid.

Medlem sedan dec. 200012 464 inlägg
#4
SELECT	F.fid, mode, datetime as datum, counts
FROM file F, mode M
WHERE F.fid=m.fid 
AND DateTime BETWEEN '2000-01-01 00:00:00' AND '2006-01-01 00:00:00'
and datetime in
   (select max(datetime)
        from mode
      where mode.fid = m.fid)
Medlem sedan nov. 2003181 inlägg
#5

LarsG skrev:

SELECT	F.fid, mode, datetime as datum, counts
FROM file F, mode M
WHERE F.fid=m.fid 
AND DateTime BETWEEN '2000-01-01 00:00:00' AND '2006-01-01 00:00:00'
and datetime in
   (select max(datetime)
        from mode
      where mode.fid = m.fid)

Tack, funkar kanon!

Har aldrig sett att det går att använda en del från huvudfrågan i subfrågan som du gör med m.fid, vet du nån bra sida man kan hitta mer information om detta?

304 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
176 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)