我有下表示例:
输入:
ID | event_type | event_value | time
---+------------+-------------+-------
1 | A | sinus | 14:23 <- select ID = 1
1 | A | sinus | 15:22
1 | B | low WC | 15:22
1 | A | sinus | 16:22
1 | C | RX OK | 17:22
.
2 | A | sinus | 14:23
2 | A | arrhytm | 15:22 <- DON'T select ID = 2
2 | B | low WC | 15:22
2 | A | sinus | 16:22
.
3 | A | sinus | 12:32 <- select ID = 3
3 | B | WC ok | 13:23
3 | C | ph ok | 13:40
3 | A | sinus | 13:33
3 | A | sinus | 14:22
输出:
ID
---
1
3
我只想选择对于给定ID,所有event_type A条目都具有event_value ='sinus'的ID。 我该怎么办?
非常感谢!
答案 0 :(得分:1)
在表名方面没有确切的细节,但是您似乎想检查该ID / Event_type是否不存在其他任何内容。
SELECT *
FROM yourTable a
WHERE a.event_type = 'A'
AND not exists (SELECT 1
FROM yourTable b
WHERE a.ID = b.ID
AND a.event_type = b.event_type
AND b.event_value <> 'sinus')
然后需要根据需要的输出对结果进行分组/汇总,问题中未显示。
答案 1 :(得分:1)
使用布尔聚合bool_and()
.
$resolver->setDefaults([
'data_class' => BitcoinRateSetting::class,
'validation_groups' => ['bitcoinRateDefault'],
'cascade_validation' => true,
]);
或者用with my_table(id, event_type, event_value, time) as (
values
(1, 'A', 'sinus', '14:23'),
(1, 'A', 'sinus', '15:22'),
(1, 'B', 'low WC', '15:22'),
(1, 'A', 'sinus', '16:22'),
(1, 'C', 'RX OK', '17:22'),
(2, 'A', 'sinus', '14:23'),
(2, 'A', 'arrhytm', '15:22'),
(2, 'B', 'low WC', '15:22'),
(2, 'A', 'sinus', '16:22')
)
select id
from my_table
group by id
having bool_and(event_type <> 'A' or event_value = 'sinus')
id
----
1
(1 row)
子句:
WHERE
答案 2 :(得分:1)
一种方法:
Select id from table
where event_type ='A'
group by id
having
min(event_value) = 'sinus'
and
max(event_value) = 'sinus'
答案 3 :(得分:1)
我将GROUP BY
与HAVING
子句一起使用:
select t.id
from table t
where t.event_type = 'A'
group by t.id
having min(t.event_value) = max(t.event_value) and min(t.event_value) = 'sinus';