создание логического выражения в mysql для извлечения данных из таблицы - PullRequest
0 голосов
/ 17 января 2020

У меня есть набор данных, который выглядит следующим образом:

enter image description here

Моя задача - написать логическое условие в MySQL на основе проверки - в и даты выезда, чтобы получить все пребывания, которые включают (ночь) 23 марта. Я попробовал это:

check_in<="23/03/2019" and check_out>"23/03/2019"

, но я обнаружил, что оставшиеся с check-in = ‘2019-03-21’ и check-out = ‘2019-03-25’ не были восстановлены, даже если они включают 23r. Интересно, в чем проблема и как я могу это исправить? спасибо:)

Ответы [ 3 ]

0 голосов
/ 18 января 2020

Вы должны присоединиться к нему, чтобы иметь возможность поиска по обоим терминам. Предполагая, что ваша таблица называется stays:

SELECT a.stay_id,a.date check_in,b.date check_out FROM stays a JOIN stays b ON a.stay_id=b.stay_id AND a.event_type='check-in' AND b.event_type='check-out' WHERE a.date<="2019-03-23" AND b.date>"2019-03-23";

0 голосов
/ 18 января 2020

Предположим, что все проверены:

select stay_id
from tbl
where event_type = 'check-in' and date <=  '2019-03-23'
and stay_id in
(select stay_id
from tbl
where event_type = 'check-out' and date > '2019-03-23')

Я могу отредактировать позже, чтобы создать логи c, чтобы включить людей, еще не проверенных

0 голосов
/ 18 января 2020

Используйте подзапрос, который группирует по stay_id и проверяет ваше требование в предложении HAVING:

select * 
from tablename
where stay_id in (
  select stay_id from tablename
  group by stay_id
  having '2019-03-23' between 
    max(case when event_type = 'check-in' then date end) and max(case when event_type = 'check-out' then date end)
)

или поскольку дата выезда является (я предполагаю) позже или равна чеку в дате:

select * 
from tablename
where stay_id in (
  select stay_id from tablename
  group by stay_id
  having '2019-03-23' between min(date) and max(date)
)

Или, если вы хотите, чтобы 1 строка для каждого stay_id:

select stay_id, min(date) check_in_date, max(date) check_out_date
from tablename
group by stay_id
having '2019-03-23' between min(date) and max(date)
...