POSTGRESQL: несколько условий с не существует в одном объединении таблицы - PullRequest
0 голосов
/ 23 мая 2018

У меня есть условие в sql select Я хочу выбрать данные из таблицы, когда checktime >= date and checktime <= date, но не существует в той же таблице, когда the condition is checktime >= date and checktime <= date

это мои данные из таблицы, когда присутствует Y-m-d 06:15:00 until Y-m-d 07:45:00:

 userid             name   checktime
195807311982032005  re1   2017-12-28 07:13:02
196001132006041007  re2   2017-12-28 07:14:37
196004201992031005  op6   2017-12-28 06:53:08
196005011986032014  re3   2017-12-28 07:01:24
196007311985032006  re4   2017-12-28 07:01:23

, а затем данные из таблицы, когда его поздно Y-m-d 07:45:00 until Y-m-d 23:45:00:

userid              name   checktime
195807311982032005  re1   2017-12-28 07:55:02
196001132006041007  re2   2017-12-28 09:14:37
196004201992031005  op6   2017-12-28 10:53:08

найдены те же данные в настоящее и позднее время (имя op6)

пример и this my query to show late person:

select distinct on (co.userid) co.userid, ui.name
from checkinout co join
     userinfo ui
     on ui.userid = co.userid
where co.checktime >= '2017-12-28 07:45:00' and
      co.checktime <= '2017-12-28 13:45:00' AND NOT EXISTS 
(SELECT co.userid from checkinout WHERE co.checktime >= '2017-12-28 06:15:00' 
and co.checktime <='2017-12-28 07:45:00');

когда я запускаю ноль, но я просто хочу show all data in checkinout table в каком-то состоянии but it's not showing again in present query ( выбрать в скобках )

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Логика, которую вы выражаете, имеет следующую форму:

select co.userid, ui.name
from checkinout co join
     userinfo ui
     on ui.userid = co.userid
group by 
from ch
having sum( (co.checktime >= '2017-12-28 06:15:00' and
             co.checktime <= '2017-12-28 07:45:00'
            )::int ) > 0 and
       sum( (co.checktime >  '2017-12-28 06:15:00' and
             co.checktime <= '2017-12-28 23:15:00'
            )::int) = 0;

Однако даты на самом деле не соответствуют условиям.

0 голосов
/ 23 мая 2018

Ваш результат нулевой, потому что вы противоречите себе в утверждении where.Если вы присоединяетесь к co.userid, совпадающему с диапазоном времени проверки, который находится внутри диапазона времени проверки NOT EXISTS, это означает, что он существует.

Вы ищете пользователей, регистрирующих эту регистрацию в этом диапазоне

WHERE co.checktime >= '2017-12-28 06:15:00' and co.checktime <= '2017-12-28 07:45:00'

И предыдущий временной диапазон включен в выбор, который он оценивает в функции НЕ СУЩЕСТВУЕТ.Следовательно, эти userId всегда будут существовать.

WHERE co.checktime > '2017-12-28 06:15:00' and co.checktime <='2017-12-28 23:15:00'

Таким образом, выполнение

NOT EXISTS (SELECT co.userid from checkinout WHERE co.checktime > '2017-12-28 06:15:00' and co.checktime <='2017-12-28 23:15:00');

В последнем «и» всегда будет ложным и не даст результатов вашему выбору.

Надеюсь, это поможет, и я понял вашу проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...