首页 > 解决方案 > SQL问题如何选择具有列条件值的行

问题描述

假设我有这张桌子:

id  timeline   
---|--------|
 1 | BASELINE |
 1 | MIDTIME  |
 1 | ENDTIME  | 
 2 | BASELINE |
 2 | MIDTIME  | 
 3 | BASELINE | 
 4 | BASELINE | 
 5 | BASELINE | 
 5 | MIDTIME  | 
 5 | ENDTIME  | 

如何获得输出,使其看起来像这样:

id  timeline   
---|--------|
 1 | BASELINE |
 1 | MIDTIME  |
 2 | BASELINE |
 2 | MIDTIME  | 
 5 | BASELINE | 
 5 | MIDTIME  | 

如何选择具有 2 个时间线值的每个 ID 的前两个术语?非常感谢

标签: sql

解决方案


这是一个示例。我使用了 ROW_NUMBER() 函数。

希望能帮到你,我的朋友:))

CREATE TABLE  TestData(id int, timeline varchar(20))

insert into TestData
values (1, 'BaseLine'), 
 (1, 'Midtime'),
 (1, 'Endtime'),
 (2, 'BaseLine'),
 (2, 'Midtime'),
 (3, 'BaseLine'),
 (4, 'BaseLine'),
 (5, 'BaseLine'),
 (5, 'Midtime'),
 (5, 'Endtime')


-----
SELECT id, timeline
FROM (SELECT id, timeline,  
    ROW_NUMBER() OVER(PARTITION BY id ORDER BY (SELECT NULL)) AS rownum
FROM TestData 
   WHERE
      id  IN (
               SELECT id FROM TestData group by id having count(id)>=2
             )
    ) as T
WHERE rownum < 3

推荐阅读