webForumDet fria alternativet

MAX()

Databaser & SQL

4 svar · 323 visningar · startad av Uwe

Medlem sedan nov. 2003181 inlägg
Frågan#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?

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)