2012-04-06 130 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