Фильтрация дат по условию - PullRequest
0 голосов
/ 31 марта 2020

У меня есть таблица со следующей структурой: Поданные имена ID C_Time Groups SYSTEM Group1

enter image description here

Я хотел бы отобразить те случаи, которые имеют статус ЗАКРЫТЬ (Группы) на уровне 2, которые были созданы (группа 1) на уровне 1 после того, как C_Time>> 1/15/2020.

Таким образом, в вышеприведенном случае (образец присоединен как ссылка) должен отображаться только идентификатор 2, так как ID1 был создан на уровне 1 до 15.01.2020. Я пытаюсь использовать следующий синтаксис -

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 голосов
/ 01 апреля 2020

Вы можете написать это как:

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
0 голосов
/ 31 марта 2020

Вы можете сгруппировать по идентификатору и установить условия в условии, имеющем:

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'

См. демо (для MySql, но это стандарт SQL). Результат:

| id  |
| --- |
| 2   |
...