Sql 如何查找具有特定列的所有值的设备?

Sql 如何查找具有特定列的所有值的设备?,sql,Sql,我有一张这样的桌子 deviceId, status, time 状态列仅可激活、空闲、报警。我要查找具有所有状态值的所有设备ID 因此,如果一个设备在该表的status列中有active、idle和alarm值,我需要它的id 我怎样才能做到这一点?您可以使用分组方式和拥有。如果您知道有三个值,只需执行以下操作: select deviceId from t group by deviceId having count(distinct status) = 3; 如果不知道列中的值数,请使

我有一张这样的桌子

deviceId, status, time
状态列仅可
激活、空闲、报警
。我要查找具有所有状态值的所有设备ID

因此,如果一个设备在该表的status列中有
active、idle和alarm
值,我需要它的id


我怎样才能做到这一点?

您可以使用
分组方式
拥有
。如果您知道有三个值,只需执行以下操作:

select deviceId
from t
group by deviceId
having count(distinct status) = 3;
如果不知道列中的值数,请使用子查询计算它们:

select deviceId
from t
group by deviceId
having count(distinct status) = (select count(distinct status) from t);
如果您特别想要这三个,请添加一个
where
子句:

select deviceId
from t
where status in ('active', 'idle', 'alarm')
group by deviceId
having count(distinct status) = 3;

非常感谢你。所以,如果我不知道列的值,我该怎么办?另外,如果我想按时间获得适合此查询的top x设备?@test big。这回答了您在这里提出的问题。新问题应作为问题而不是评论提出。@测试大如果该答案解决了您在此处提出的问题,请将其删除,以便将您的问题标记为已解决。在问下一个问题时,请随意链接到这个问题,以提供一些上下文。我忘记接受它了。很抱歉不,我想知道。我试图解决它,但我做不到