Το τραπέζι μου είναι:
id home datetime player resource
---|-----|------------|--------|---------
1 | 10 | 04/03/2009 | john | 399
2 | 11 | 04/03/2009 | juliet | 244
5 | 12 | 04/03/2009 | borat | 555
3 | 10 | 03/03/2009 | john | 300
4 | 11 | 03/03/2009 | juliet | 200
6 | 12 | 03/03/2009 | borat | 500
7 | 13 | 24/12/2008 | borat | 600
8 | 13 | 01/01/2009 | borat | 700
Θέλω να επιλέξω κάθε ξεχωριστή home
που κατέχει τη μέγιστη τιμή της datetime
.
Το αποτέλεσμα θα είναι:
id home datetime player resource
---|-----|------------|--------|---------
1 | 10 | 04/03/2009 | john | 399
2 | 11 | 04/03/2009 | juliet | 244
5 | 12 | 04/03/2009 | borat | 555
8 | 13 | 01/01/2009 | borat | 700
Έχω δοκιμάσει:
-- 1 ..by the MySQL manual:
SELECT DISTINCT
home,
id,
datetime AS dt,
player,
resource
FROM topten t1
WHERE datetime = (SELECT
MAX(t2.datetime)
FROM topten t2
GROUP BY home)
GROUP BY datetime
ORDER BY datetime DESC
Δεν λειτουργεί. Το σύνολο αποτελεσμάτων έχει 130 σειρές αν και η βάση δεδομένων περιέχει 187.
Το αποτέλεσμα περιλαμβάνει μερικά αντίγραφα του home
.
-- 2 ..join
SELECT
s1.id,
s1.home,
s1.datetime,
s1.player,
s1.resource
FROM topten s1
JOIN (SELECT
id,
MAX(datetime) AS dt
FROM topten
GROUP BY id) AS s2
ON s1.id = s2.id
ORDER BY datetime
Όχι. Δίνει όλες τις εγγραφές.
-- 3 ..something exotic:
Με διάφορα αποτελέσματα.
Είστε τόσο κοντά! Το μόνο που χρειάζεται να κάνετε είναι να επιλέξετε και τα δύο πεδία της κατοικίας και την μέγιστη ημερομηνία και στη συνέχεια να συνδεθείτε με τον πίνακα "topten" και στα δύο πεδία:
SELECT tt.*
FROM topten tt
INNER JOIN
(SELECT home, MAX(datetime) AS MaxDateTime
FROM topten
GROUP BY home) groupedtt
ON tt.home = groupedtt.home
AND tt.datetime = groupedtt.MaxDateTime
Αυτό θα λειτουργήσει ακόμη και αν έχετε δύο ή περισσότερες γραμμές για κάθε home
με ίσες DATETIME
's:
SELECT id, home, datetime, player, resource
FROM (
SELECT (
SELECT id
FROM topten ti
WHERE ti.home = t1.home
ORDER BY
ti.datetime DESC
LIMIT 1
) lid
FROM (
SELECT DISTINCT home
FROM topten
) t1
) ro, topten t2
WHERE t2.id = ro.lid
Νομίζω ότι αυτό θα σας δώσει το επιθυμητό αποτέλεσμα:
SELECT home, MAX(datetime)
FROM my_table
GROUP BY home
ΑΛΛΑ αν χρειάζεστε και άλλες στήλες, απλά κάντε μια σύνδεση με τον αρχικό πίνακα (δείτε την απάντηση του "Michael La Voie")
Με τους καλύτερους χαιρετισμούς.