2014-03-05 125 views
-2

我有一個表,其中包含以下列; ID,post_id,狀態和日期時間。每次更新帖子(post_id)時,都會插入一行,並顯示最新狀態和日期時間時間戳。我創建了一個按狀態分類的餅圖。因此,我必須先選擇帖子的最新條目(忽略所有過去的更新),然後COUNT返回多少行並按狀態分組。我的查詢是什麼樣的?MySql選擇最新的行,然後組,然後計數

+1

您告訴我們。你的查詢目前是什麼樣的?表明你已經付出了一些努力。 –

+0

我目前的查詢如下所示:SELECT狀態,COUNT(*)AS statusCnt FROM檢查GROUP BY狀態。它返回所有事物的計數並且不會過濾出過去的事件。 – vanreus

回答

1
SELECT status, COUNT(*) AS statusCnt 
FROM inspections 
WHERE id IN (SELECT MAX(id) FROM inspections GROUP BY post_id) 
GROUP BY status 

未經檢驗的替代:

SELECT i1.status, COUNT(i1.*) AS statusCnt 
FROM inspections i1 
    JOIN (
     SELECT MAX(i2.id) AS maxID FROM inspections i2 GROUP BY i2.post_id 
    ) AS innerTbl ON i1.id = innerTbl.id 
GROUP BY i1.status 
+0

這正是我所需要的。掙扎數小時。謝謝您的幫助! – vanreus

+0

雖然這可行,但加載結果需要很長時間。由於我不是一個sql專家,無論如何,要使這個更高效嗎?檢查表中有大約7000行。 – vanreus

+0

@vanreus剛剛添加了可能(或不可以)幫助的替代版本。 –

0
SELECT count(*) FROM (SELECT *,MAX(time) FROM table GROUP BY post_id) As b 

按我你的問題的解釋,查詢應該是這樣的

+0

'SELECT *,MAX(time)'這不會做我認爲你會認爲它會做的事。 「*」中包含的值不一定與最近一次的行對應。 –

+1

我認爲你的結果與'SELECT COUNT(DISTINCT post_id)FROM table'是一個單一的標量值。 – AgRizzo