我有一個數據表是這樣的:只選擇最新的分組項
+-----------+-------+------+----------+
| timestamp | event | data | moreData |
+-----------+-------+------+----------+
| 100000000 | 1 | 10 | 20 |
| 100000001 | 1 | 15 | 10 |
| 100000002 | 1 | 30 | 30 |
| 100000003 | 1 | 5 | 50 |
| 100000004 | 2 | 110 | 120 |
| 100000005 | 2 | 115 | 110 |
| 100000006 | 2 | 130 | 130 |
| 100000007 | 2 | 15 | 150 |
+-----------+-------+------+----------+
現在我只需要選擇每個事件的最新行。所以最後我想要這個結果集:
+-----------+-------+------+----------+
| timestamp | event | data | moreData |
+-----------+-------+------+----------+
| 100000003 | 1 | 5 | 50 |
| 100000007 | 2 | 15 | 150 |
+-----------+-------+------+----------+
到目前爲止,我無法做到這一點。在MySQL中,我可以使用「GROUP BY事件」,但是我從數據庫中得到一些隨機的行,而不是最新的。 ORDER BY沒有幫助,因爲分組是在訂購之前完成的。在按事件分組時,使用像MAX(時間戳)這樣的聚合也無濟於事,因爲時間戳是最新的,但是「數據」和「moreData」仍然來自其他一些隨機行。
我想我必須做一個子選擇,所以我必須先得到最新的時間戳是這樣的:
SELECT MAX(timestamp), event FROM mytable GROUP BY event
,然後使用結果集來過濾第二選擇,但如何?也許有一個聰明的方式來做到這一點沒有一個子選擇?
似乎很相似,這所以問題:http://stackoverflow.com/questions/2657482/sql-find-the-max-record-per-group也許看看那一個。 – itsmatt