mysql查询,选择distinct/max

mysql查询,选择distinct/max,mysql,sql,Mysql,Sql,我需要计算表LDS中所有不同的值,其中状态为“ok”且日期为“2012-01-01”,如果有多个相同的id,则只检查最新日期的id:如果此id的状态为“ok”,则对其进行计数 表1: 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 ID |状态|日

我需要计算表LDS中所有不同的值,其中状态为“ok”且日期为“2012-01-01”,如果有多个相同的id,则只检查最新日期的id:如果此id的状态为“ok”,则对其进行计数

表1:

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 ID |状态|日期 1 |好| 2012-01-01 2 |坏| 2012-01-01 1 |坏| 2012-02-02 3 |好| 2012-01-01 4 | ok | 1999-01-01
结果应该是“1”(ID 3)

我假设,因为您想要计算不同的ID,所以在重复的情况下计算哪个ID并不重要,因为这不会影响最终的计数:

编辑:更新查询以排除任何具有后续“错误”状态的
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
选择计数(不同的lds1.ID)
从…起
LDS lds1
左连接LDS lds2
在lds1.ID=lds2.ID上
和lds1.日期'2012-01-01'
和lds1.Status='ok'
并且lds2.ID是NUL

请注意,计数哪个相同的id并不重要。结果应该是
0
。除非你的意思是
=
,而不是
,在我的表中有很多条目,否则我已经尝试了LDS中的Max(id),其中状态为“ok”和日期为“2012-01-01”,但这只返回一个id(带有最新日期),而不是所有id。如果他确实是指
=
。。。结果不是“2”(ID:1,ID:3)吗?主键是本例中未使用/显示的序列号。使用“distinct”返回ID 1和ID 3,但ID 1的新状态为“bad”,因此不应进行计数。@user1291842这仅返回计数。。。单一值。您运行的是什么查询,您想要的结果是什么?你要一次计数吗?所有ID的列表?感谢您的帮助-您的查询正在运行!我没想到会这么麻烦…嗨,Michael,我现在需要在执行查询之前添加一个额外的WHERE子句来检查查询,以使查询更加“麻烦”(这是一个单词吗?),以防这对您来说很容易。我在这里发布了一个新问题: