我有一個MySQL表結構如下稱爲daily_measurements查詢獲取第一次進入現場爲每一位用戶
+------------+----------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | | 0 | |
| date | datetime | NO | MUL | 0000-00-00 00:00:00 | |
| weight | float | NO | | 0 | |
| bicep | float | NO | | 0 | |
| chest | float | NO | | 0 | |
| waist | float | NO | | 0 | |
| neck | float | NO | | 0 | |
| thigh | float | NO | | 0 | |
| hips | float | NO | | 0 | |
| shoulders | float | NO | | 0 | |
| knee | float | NO | | 0 | |
| ankle | float | NO | | 0 | |
| created_on | datetime | NO | | 0000-00-00 00:00:00 | |
+------------+----------+------+-----+---------------------+----------------+
我需要檢索每個用戶的重量的名單有第一和最後一個項目。
我試過GROUP BY,MIN(日期),MAX(日期)等各種組合,但我似乎無法找出一種方法來有效地做到這一點。
我一直能夠得到這個工作的唯一方法是對用戶表,w/2子查詢進行以下查詢,但是由於存在30,000個用戶和> 200,000個度量,查詢扼殺了相當不好的結果。
SELECT u.id,
(SELECT user_id, weight, date FROM daily_measurements WHERE user_id = u.id ORDER BY date DESC limit 1) as starting_weight,
(SELECT user_id, weight, date FROM daily_measurements WHERE user_id = u.id ORDER BY date ASC limit 1) as ending_weight
FROM users u
任何幫助,將不勝感激。
也許這有助於http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ – cristian
感謝您的鏈接......將它添加到我的instapaper列表中以供稍後閱讀。 – Travis