במקרים רבים יש לנו טבלא בבסיס הנתונים המכילה אוסף רשומות של שינויי סטטוס הכוללים הסטוריה.
משהו בדומה ל -
בתאריך 2013-02-07, הועבר שחקן x לשרת s1
בתאריך 2013-02-07, הועבר שחקן y לשרת s2
בתאריך 2013-02-08, הועבר שחקן x לשרת s2
בתאריך 2013-02-09, הועבר שחקן x לשרת s3
בתאריך 2013-02-09, הועבר שחקן y לשרת s1
הטבלא תראה בערך כך:
ואנחנו רוצים לשלוף את הרשומה העדכנית ביותר עבור כל אחד מהשחקנים. כלומר כל שחקן באיזה שרת הוא נמצא.
שיטה מעניינת לעשות זאת, היא באמצעות left join query לאותה טבלא עצמה בצורה זו:
זה ייתן לנו תוצאה כזו:
לקריאה נוספת: stack overflow וכן http://kristiannielsen.livejournal.com/6745.html
משהו בדומה ל -
בתאריך 2013-02-07, הועבר שחקן x לשרת s1
בתאריך 2013-02-07, הועבר שחקן y לשרת s2
בתאריך 2013-02-08, הועבר שחקן x לשרת s2
בתאריך 2013-02-09, הועבר שחקן x לשרת s3
בתאריך 2013-02-09, הועבר שחקן y לשרת s1
הטבלא תראה בערך כך:
id | date | player | server |
---|---|---|---|
1 | 2013-02-07 | x | s1 |
2 | 2013-02-07 | y | s2 |
3 | 2013-02-08 | x | s2 |
4 | 2013-02-09 | x | s3 |
5 | 2013-02-09 | y | s1 |
ואנחנו רוצים לשלוף את הרשומה העדכנית ביותר עבור כל אחד מהשחקנים. כלומר כל שחקן באיזה שרת הוא נמצא.
שיטה מעניינת לעשות זאת, היא באמצעות left join query לאותה טבלא עצמה בצורה זו:
SELECT
*
FROM
table AS t
LEFT JOIN table AS t2 ON t.player=t2.player AND t.date < t2.date
WHERE t2.date IS NULL
id | date | player | server |
---|---|---|---|
4 | 2013-02-09 | x | s3 |
5 | 2013-02-09 | y | s1 |
לקריאה נוספת: stack overflow וכן http://kristiannielsen.livejournal.com/6745.html
Comments
Post a Comment