在我的Android应用程序中,我使用带有名为" event_table"的表的sqlite数据库。看起来像这样:
我的目标是为每位参赛者找到最佳时间或距离。
我的查询代码如下所示:
TrackAndFieldDBHelper mOpenHelper = new TrackAndFieldDBHelper(this);
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
boolean isTimedEvent = Event.isEventTimed(this, event);
String rawQuery = "SELECT * FROM event_table INNER JOIN (SELECT athlete_id " + (isTimedEvent ? ", MIN(" : ", MAX(") + "sort_result) AS MinOrMaxResult FROM event_table GROUP BY athlete_id) joinedTable ON event_table.athlete_id = joinedTable.athlete_id AND event_table.sort_result = joinedTable.MinOrMaxResult";
Cursor data = db.rawQuery(rawQuery, null);
if (data != null) {
if (data.moveToFirst()) {
do {
long athleteID = data.getLong(data.getColumnIndexOrThrow(TrackAndFieldContract.EventEntry.COLUMN_ATHLETE_ID));
String event = data.getString(data.getColumnIndexOrThrow(TrackAndFieldContract.EventEntry.COLUMN_EVENT));
String result = data.getString(data.getColumnIndexOrThrow(TrackAndFieldContract.EventEntry.COLUMN_RESULT));
Log.d(TAG, "athlete id: " + athleteID + " event: " + event + " result: " + result);
} while (data.moveToNext());
}
data.close();
}
db.close();
}
日志的结果如下所示:
运动员身份:4事件:3000米结果:12:08.24
运动员身份:5事件:3000米结果:13:47.68
运动员身份:1事件:铁饼结果:130-00
运动员身份:2事件:铁饼结果:114-00
运动员身份:3项赛事:400米成绩:61.00
运动员身份:6事件:400米结果:61.50
对于这3个事件(3000m,Discus,400m)和athlete_id,结果值是正确的。我确实得到了正确的最大值或最小值。所以我的问题是其他事件发生了什么? (100米,100小时,1500米,铅球)难道我的查询不应包括这些事件吗?我还没弄清楚原因。我试图为丢失的事件添加一个WHERE子句,但什么也没得到。谢谢您的帮助。