/ / SQL wählt mehrere maximale Zeilen aus, bei denen die ID identisch ist - sql

SQL wählt mehrere maximale Zeilen aus, deren ID gleich ist - sql

Ich habe immer wieder Probleme damit gehabt, kann es aber nicht schaffen. war schon seit Stunden in diesen Foren ... Datensatz:

Zeile Datum AccountID Spalte 1 121/02/2013 0:30 A0M8FA1003YP. 2 21/02/2013 0:30 A0M8FA1003YP. 3 21/02/2013 0:30 A0M8FA1003YP. 4 24/09/2007 12:00 A0M8FA1003YP. 5 24/09/2007 12:00 A0M8FA1003YP. 6 24/09/2007 12:00 A0M8FA1003YP. 7 12/02/2009 12:00 A023123332YP. 8 24/09/2003 12:00 A023123332YP. 9 24/09/2003 12:00 A023123332YP. 10 24/09/2003 12:00 A023123332YP.

Ich möchte den maximalen Wert des Datums zurückgebenSpalte, gibt jedoch nicht nur eine einzelne Zeile zurück, sondern alle Zeilen, die diesem Maximalwert entsprechen. D.h. Im obigen Set möchte ich die Zeilen 1, 2, 3 und 7 zurückgeben (alle Spalten auch für die Zeilen).

Zeile Date AccountID Spalte1 1 21/02/2013 0:30 A0M8FA1003YP. 2 21/02/2013 0:30 A0M8FA1003YP. 3 21/02/2013 0:30 A0M8FA1003YP. 7 12/02/2009 12:00 A023123332YP.

Ich habe Tausende von Zeilen, und die Anzahl der übereinstimmenden Zeilen, die für jede ACCOUNTID zurückgegeben werden müssen, variiert zwischen 1, 2 und 10. Bitte helfen Sie mir !!!

AKTUALISIEREN Hab das auch probiert

Wählen Sie max (ASS_SCH_DATE) über (Partition nach AccountID), AccountID, ASS_SCH_DATE, ACCOUNTID aus # Temp3 order by # Temp3.ACCOUNTID aus

Die Ergebnisse zeigen immer noch zusätzliche Zeilen.


(Kein Spaltenname) ASS_SCH_DATE      ACCOUNTID 2013-02-21 00: 30: 00.000 2013-02-21 00: 30: 00.000 A0M8FA1003YP 2013-02-21 00: 30: 00.000 2013-02-21 00: 30: 00.000 A0M8FA1003YP 2013-02-21 00: 30: 00.000 2013-02-21 00: 30: 00.000 A0M8FA1003YP 2013-02-21 00: 30: 00.000 2007-09-24 12: 00: 00.000 A0M8FA1003YP 2013-02-21 00: 30: 00.000 2007-09-24 12: 00: 00.000 A0M8FA1003YP

Antworten:

4 für die Antwort № 1

Abfrage:

SQLFIDDLEExample

SELECT t1.*
FROM Table1 t1
WHERE t1.Date = (SELECT MAX(t2.Date)
FROM Table1 t2
WHERE t2.AccountID = t1.AccountID)

Ergebnis:

| ROW |                            DATE |    ACCOUNTID |
--------------------------------------------------------
|   1 | February, 21 2013 00:30:00+0000 | A0M8FA1003YP |
|   2 | February, 21 2013 00:30:00+0000 | A0M8FA1003YP |
|   3 | February, 21 2013 00:30:00+0000 | A0M8FA1003YP |
|   7 | February, 12 2009 12:00:00+0000 | A023123332YP |

1 für die Antwort № 2
select * from table where date in (select max(date) from table)

0 für die Antwort № 3

Windows-Funktionen sind das, wonach Sie suchen:

Select row,max(date) over (partition by AccountID) As max_date, AccountID,
Column1 from table where max_date = date;

0 für die Antwort № 4

Versuchen Sie es mit Ränge:

SELECT  AccountID,
ASS_SCH_DATE,
RANK() OVER (PARTITION BY ASS_SCH_DATE ORDER BY AccountID) DateRank
FROM YourTable
WHERE DateRank = 1

Auf diese Weise können Sie auch höchste Ränge, zweithöchste usw. auswählen.


0 für die Antwort № 5

Versuche dies,

select * from tablename where date in (select max(date) from table group by AccountID)

Bitte sehen Sie sich ... an sqlFiddle-DemoEs gibt dieselbe Ausgabe, die Sie erwarten.


0 für die Antwort № 6

Einfach...

Als "Dummy" für Ihren Tisch würde ich schreiben:

SELECT dummy.*
FROM
(
SELECT MAX(Date) Date, AccountID
FROM dummy
GROUP BY AccountID
) max_date
INNER JOIN dummy
ON(
dummy.Date      = max_date.Date
AND dummy.AccountID = max_date.AccountID
)

Oder verwenden Sie eine moderne, semantischere Syntax:

WITH max_date(Date, AccountID)
AS
(
SELECT MAX(Date) Date, AccountID
FROM dummy
GROUP BY AccountID
)
SELECT dummy.*
FROM
max_date
INNER JOIN dummy
ON(
dummy.Date      = max_date.Date
AND dummy.AccountID = max_date.AccountID
)