2012-04-06 113 views
1

我需要統計從表LDS所有不同的值,其中status = 'ok' AND date >= '2012-01-01'如果有多個相同的ID,然後只檢查一個與最新的日期:如果此ID的「OK」狀態,然後算上它。MySQL查詢,選擇不同的/最大

表LDS:

 
ID | STATUS | DATE 
1 | ok  | 2012-01-01 
2 | bad  | 2012-01-01 
1 | bad  | 2012-02-02 
3 | ok  | 2012-01-01 
4 | ok  | 1999-01-01 

的結果應該是 「1」(ID 3)

+0

請注意,它應該不重要*您*數*相同的ID。 – 2012-04-06 16:21:35

+0

結果應該是'0'。除非你的意思是''=''而不是'>' – 2012-04-06 16:22:30

+0

我的桌子上有很多條目,我試過Max(id)FROM LDS WHERE status ='ok'和date>'2012-01-01',但只返回一個單ID(包含最新的日期),而不是所有的ID。 – user1291842 2012-04-06 16:23:35

回答

3

我假設,因爲你要算獨特的ID,它並不重要ID是計算在重複的情況下,因爲這並不影響最終計數:

編輯:更新查詢,以排除其中有一個後續'bad'狀態的任何ID

SELECT COUNT(DISTINCT lds1.ID) 
FROM 
    LDS lds1 
    LEFT JOIN LDS lds2 
     ON lds1.ID = lds2.ID 
     AND lds1.Date < lds2.Date 
     AND lds2.Status = 'bad' 
WHERE 
    lds1.Date > '2012-01-01' 
    AND lds1.Status = 'ok' 
    AND lds2.ID IS NUL 
+0

使用不使用順序數/「不同的」返回ID 1和ID 3,但ID 1具有「壞」的一個新的狀態,因此不應該在所有計數。 – user1291842 2012-04-06 16:30:01

+0

@ user1291842這隻會返回一個計數...單個值。你正在運行什麼查詢,以及你想要的結果是什麼?你想要一個單一的計數?所有ID的列表? – 2012-04-06 17:15:02

+0

感謝您的幫助 - 您的查詢正在工作!我沒想到它會這麼毛茸茸的...... – user1291842 2012-04-06 17:37:50