首页 > 解决方案 > SQL:子集数据:当id的time_id满足另一列的条件时选择id

问题描述

我在 SQL 中有一个数据(dt),如下所示:

 ID     time_id  act  rd
 11        1      1    1
 11        2      4    1
 11        3      7    0
 12        1      8    1
 12        2      2    0
 12        3      4    1
 12        4      3    1
 12        5      4    1
 13        1      4    1
 13        2      1    0
 15        1      3    1
 16        1      8    0
 16        2      8    0
 16        3      8    0
 16        4      8    0
 16        5      8    0

我想获取此数据的子集,以便仅保留具有 time_id == 5 的 ids(及其相应的 time_id、act、rd)。所需的输出如下

 ID     time_id  act  rd     
 12        1      8    1
 12        2      2    0
 12        3      4    1
 12        4      3    1
 12        5      4    1
 16        1      8    0
 16        2      8    0
 16        3      8    0
 16        4      8    0
 16        5      8    0

我知道我应该以某种方式使用 having 子句,但到目前为止还没有成功(返回空输出)。以下是我的尝试:

SELECT * FROM dt GROUP BY ID 具有 min(time_id) == 5;

标签: sqlfilterdata-manipulationhaving

解决方案


WITH temp AS
(
SELECT id FROM tab WHERE time_id = 5
)
SELECT * FROM tab t join temp tp on(t.id=tp.id);

推荐阅读