653 Stimmen

Abrufen der Zeile, die den Max-Wert für eine Spalte enthält

Tabelle:

UserId, Value, Date.

Ich möchte die UserId, Wert für die max (Datum) für jede UserId zu erhalten. Das heißt, der Wert für jede UserId, die das späteste Datum hat. Gibt es eine Möglichkeit, dies einfach in SQL zu tun? (Vorzugsweise Oracle)

更新しました。 Entschuldigung für etwaige Unklarheiten: Ich muss ALLE UserIds abrufen. Aber für jede UserId, nur die Zeile, wo dieser Benutzer das neueste Datum hat.

2voto

stefano m Punkte 3894

Ich denke, Sie sollten diese Variante zur vorherigen Abfrage machen:

SELECT UserId, Value FROM Users U1 WHERE 
Date = ( SELECT MAX(Date)    FROM Users where UserId = U1.UserId)

2voto

jdmichal Punkte 10727

Ich denke etwa so. (Verzeihen Sie mir etwaige Syntaxfehler; Ich bin es gewohnt, HQL an dieser Stelle zu verwenden!)

EDIT: Habe die Frage auch falsch gelesen! Habe die Abfrage korrigiert...

SELECT UserId, Value
FROM Users AS user
WHERE Date = (
    SELECT MAX(Date)
    FROM Users AS maxtest
    WHERE maxtest.UserId = user.UserId
)

2voto

nouky Punkte 65
select VALUE from TABLE1 where TIME = 
   (select max(TIME) from TABLE1 where DATE= 
   (select max(DATE) from TABLE1 where CRITERIA=CRITERIA))

1voto

Ben Lin Punkte 609

Lösung für MySQL, das keine Konzepte für Partition KEEP, DENSE_RANK hat.

select userid,
       my_date,
       ...
from
(
select @sno:= case when @pid<>userid then 0
                    else @sno+1
    end as serialnumber, 
    @pid:=userid,
       my_Date,
       ...
from   users order by userid, my_date
) a
where a.serialnumber=0

Referenz: http://benincampus.blogspot.com/2013/08/select-rows-which-have-maxmin-value-in.html

1voto

marc Punkte 3198

Unter der Annahme, dass Date für eine bestimmte UserID eindeutig ist, hier einige TSQL:

SELECT 
    UserTest.UserID, UserTest.Value
FROM UserTest
INNER JOIN
(
    SELECT UserID, MAX(Date) MaxDate
    FROM UserTest
    GROUP BY UserID
) Dates
ON UserTest.UserID = Dates.UserID
AND UserTest.Date = Dates.MaxDate

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X