根据条件过滤日期

时间:2020-03-31 20:29:19

标签: sql teradata

我有一个具有以下结构的表:归档名称ID C_Time Groups SYSTEM Group1

enter image description here

我想显示在C2Time> = 1/15/2020之后在level1中创建(Group1)状态为level 2中CLOSE(组)的情况。

因此,在上述情况下(作为链接附带的示例),由于ID1是在2020年1月15日之前在level1中创建的,因此仅应显示ID 2。 我正在尝试使用以下语法-

SELECT
    (CASE WHEN TM1.SYSTEM = 'level1' and TM1.Group1 = 'Created'
     and TM1.C_Time >= '2019-11-01 00:00:00' THEN TM1.ID  END)  as CDF  
FROM TABLE AS TM1 
Where TM1.SYSTEM IN ('level2') AND TM1.Groups = 'CLOSE' 

但是,我没有得到想要的结果。任何建议都会有所帮助。

谢谢大家

关于, 日西

2 个答案:

答案 0 :(得分:0)

您可以按id分组,并在hading子句中设置条件:

select id
from tablename
group by id
having max(case when group1 = 'Status' and system = 'level2' then groups end) = 'CLOSE'
   and max(case when group1 = 'Created' and system = 'level1' then c_time end) >= '2020-01-15 00:00:00'

请参见demo(对于MySql,但这是标准SQL)。
结果:

| id  |
| --- |
| 2   |

答案 1 :(得分:0)

您可以这样写:

select id
from t
where (group1 = 'Status' and system = 'level2') or
      (group1 = 'Created' and system = 'level1' and ctime > '2020-01-15')
group by id
having count(*) = 2;

以上内容假设您没有重复的行。如果这样做,请将having更改为:

having count(distinct group1) = 2
相关问题