Περισσότερα
Πώς μπορώ να ΕΠΙΛΕΞΩ γραμμές με MAX(τιμή στήλης), DISTINCT από άλλη στήλη στην SQL;
Το τραπέζι μου είναι:
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:
Με διάφορα αποτελέσματα.
724
3
Είστε τόσο κοντά! Το μόνο που χρειάζεται να κάνετε είναι να επιλέξετε και τα δύο πεδία της κατοικίας και την μέγιστη ημερομηνία και στη συνέχεια να συνδεθείτε με τον πίνακα "topten" και στα δύο πεδία:
Αυτό θα λειτουργήσει ακόμη και αν έχετε δύο ή περισσότερες γραμμές για κάθε
home
με ίσεςDATETIME
's:Νομίζω ότι αυτό θα σας δώσει το επιθυμητό αποτέλεσμα:
ΑΛΛΑ αν χρειάζεστε και άλλες στήλες, απλά κάντε μια σύνδεση με τον αρχικό πίνακα (δείτε την απάντηση του "Michael La Voie")
Με τους καλύτερους χαιρετισμούς.