2017-06-01 5 views
2

Ich habe Tabelle wie untenSQL den letzten Datensatz für ein Konto auf MySQL SELECT

id transaction value date  account number 
1     5  05/01/17 AA1 
2     3  05/02/17 AA2 
3     7  05/01/17 AA3 
4     3  05/03/17 AA2 
5     5  05/02/17 AA1 
6     3  05/02/17 AA5 
7     5  05/03/17 AA1 
8     3  05/04/17 AA2 
9     5  05/04/17 AA1 
10    3  05/02/17 AA4 
11    5  05/05/17 AA1 
12    3  05/06/17 AA2 
13    5  05/05/17 AA1 
14    3  05/07/17 AA2 
15    5  05/07/17 AA1 
16    5  05/01/17 AA6 
17    3  05/08/17 AA2 

ich den letzten Transaktionsdatensatz auswählen möge für jedes Konto

+0

https://stackoverflow.com/questions/tagged/greatest-n-per-group+sql –

+0

Ich usng MySQL –

Antwort

0

Probieren Sie es aus.

select t1.* 
from table_name as t1, 
(select account_number, max(id) as id from table_name group by account_number) as t2 
where t1.id = t2.id; 
+0

Macht logischen Sinn aber MySQL hat Fehler auf dieser Syntax auf (wählen Sie acc_number ....). Es scheint nur t2 nicht als zweite Tabelle zu akzeptieren. –

+0

Stellen Sie sicher, dass Sie ein Komma nach t1 setzen. Ich habe das in MySQL ausgeführt und es hat für mich funktioniert. –

+0

@ edy.devs Könntest du mich wissen lassen, ob das für dich funktioniert hat? –

0
SELECT fields FROM table ORDER BY id DESC LIMIT 1; 
+0

Das wird nicht funktionieren, wenn Sie einen Datensatz löschen –

+0

Sie sollten eine Autoinkrement hinzufügen Feld, das Ihre Feldakte zählt oder überwacht. –

+0

Könnten Sie uns bitte sagen, warum @RedDevil? – Roberto

0

Try this:

SELECT TOP 1 * FROM Table ORDER BY DESC 
+0

funktioniert nicht auf Oracle DB – Jelman

+0

Es funktioniert nur auf Microsof "SQL Server" Produkt – Roberto

+1

Dies wird nur eine einzige Zeile, nicht eine Zeile für jeden Account –

0

Wenn Ihre db bestellt wird (gehe davon aus) versuche dieses

SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE) 
+1

Dies gibt nur eine einzelne Zeile und nicht eine Zeile für jedes Konto zurück. –

+0

wird nicht funktionieren, weil ich ein paar Kontonummern habe! –

1

Sie müssen nach der Kontonummer gruppieren. siehe unten

CREATE TABLE #t (id int, value DECIMAL(18,2), date DATETIME, account_number VARCHAR(50)) 

SELECT T1.* 
FROM #T T1 
     INNER JOIN ( SELECT account_number, MAX(id) id 
        FROM #T 
        GROUP BY account_number ) T2 
       ON T2.account_number = T1.account_number 
       AND T2.id = T1.id 
+0

Dies kann auch mit 'IN' und einem Subselect geschrieben werden. – Stavr00

+0

Funktioniert nicht für MySQL. Welches DBMS ist das? –

+0

Ich schrieb die SQL für Microsoft SQL-Server, aber ist es ANSI-konform mit Ausnahme der Syntax für temporäre Tabellenerstellung denken. In MYSQL würden Sie das temporäre Schlüsselwort verwenden – Steve

Verwandte Themen