2010-09-14 289 views
2

我遇到了一個SQL查詢有點麻煩。這就是爲什麼我希望你們中的一些人能夠幫助我。需要MySQL幫助

我有一個查詢,從每個關係ID中選擇最新的條目,但我想選擇狀態不同的最新條目。桌子看起來像這樣。

+-----------+-------------+------+-----+-------------------+----------------+ 
| Field  | Type  | Null | Key | Default   | Extra   | 
+-----------+-------------+------+-----+-------------------+----------------+ 
| id  | int(11)  | NO | PRI | NULL    | auto_increment | 
| kid_id | int(11)  | NO |  | NULL    |    | 
| status | varchar(50) | NO |  | NULL    |    | 
| timestamp | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
+-----------+-------------+------+-----+-------------------+----------------+ 

而我目前的查詢看起來像這樣。

SELECT * 
      FROM (
       SELECT * 
       FROM actions 
       AS a 
       WHERE date(timestamp) = curdate() 
       AND timestamp = (
        SELECT max(timestamp) 
        FROM actions 
        AS b 
        WHERE a.kid_id = b.kid_id 
        ) 
       ) 
      AS c 
      ORDER BY kid_id 

而結果是這樣的:

id kid_id status timestamp 
54 1 Kommet 2010-09-15 00:14:51 
57 2 Gået 2010-09-15 00:17:58 
56 3 Kommet 2010-09-15 00:15:00 

的問題是,在那裏kid_id等於2,我想看到最新的條目,其中狀態=「Kommet」 ......

我想要每個孩子的2條最新記錄。第一條記錄,其中狀態=「Kommet」,第二個,其中狀態=「Gået」

在事先非常感謝你的幫助......這真是感激:)

+1

我已經添加了「每個組最大的標籤」。這種類型的查詢在Stack Overflow上已經被回答了幾十次。閱讀一些解決方案。 – 2010-09-14 23:03:48

回答

1

如果你不打擾有關獲取的ID,那麼你可以運行以下命令:

SELECT kid_id, status, MAX(`timestamp`) as `timestamp` 
FROM actions 
WHERE DATE(`timestamp`) = CURDATE() 
GROUP BY kid_id, status 

如果您需要id,土特產品不能只是添加到列表SELECT不過,作爲GROUP BY將拉動匹配ID在這裏顯示的一個,不一定是匹配MAX(timestamp)的那個。

+0

非常感謝你的幫助。我做了一些小的修改,但基本上這解決了我的問題:) – nickifrandsen 2010-09-15 14:23:22