2016-02-23 16 views
0

Скажем, у меня есть таблица (tbl_reservations) со следующими столбцами:Mysql - Как получить пользователей, которые забронировали определенное количество дней подряд?

p_id 
userid 
reservation_id 
book_date 
db_add_date 

p_id userid reservation_id book_date  
1  01  124534   2016-02-19  2016-02-19 
2  01  124554   2016-02-20  2016-02-20 
3  01  124564   2016-02-21  2016-02-21 
4  01  167823   2016-02-22  2016-02-22 
5  01  12313   2016-02-23  2016-02-23 
6  02  134564   2016-02-21  2016-02-21 
7  03  197823   2016-02-22  2016-02-22 
8  02  13313   2016-02-23  2016-02-23 

**Desired Result** 

As userid 01 booked reservation since last 5 days regularty it will appear in query result 

userid 
01 

Я хочу, чтобы пользователи, которые заказали определенное количество дней подряд?

, например. Я хочу получить уникальных пользователей, которые забронировали в последние 5 дней.

Может ли кто-нибудь помочь мне, как построить запрос для этого? Это было бы очень большой помощью. Спасибо.

+0

Пожалуйста, отредактируйте ваш вопрос и предоставите данные образца и желаемые результаты. Например, у вас, похоже, есть разные вопросы, которые не эквивалентны. –

ответ

3

Если вы хотите уникальных пользователей, которые забронированы в течение последних пяти дней, то запрос, как это, казалось бы делать то, что вы хотите:

select userid 
from tbl_reservations 
where bookdate > date_sub(curdate(), interval 5 day) and bookdate <= curdate() 
group by userid; 

Если вы хотите, чтобы пользователи, которые забронированы на все дни:

select userid 
from tbl_reservations 
where bookdate > date_sub(curdate(), interval 5 day) and bookdate <= curdate() 
group by userid 
having count(*) = 5; 
0

Попробуйте этот запрос:

SELECT userid 
from tbl_reservations 
WHERE book_date >= DATE_SUB(CURDATE(), INTERVAL 5 DAY) AND book_date <= CURDATE() 
GROUP BY userid 
HAVING COUNT(*) = 5; 
+0

ОП спросил: «Я хочу, чтобы пользователи, которые забронировали определенное количество дней подряд?». Насколько я понимаю, вы просто получаете кого-либо, кто забронировал за последние 5 дней – Henders

+0

@Henders внесла изменения, добавила группу по предложению –

+0

Но какая часть вашего SQL означает, что каждый пользователь, которого вы возвращаете, забронировал каждый номер «x» дней? Если я не ошибаюсь, вышеупомянутое все равно возвращает любого пользователя, который забронировал за последние 5 дней, независимо от того, сколько раз они забронировали. – Henders

0

попробовать это sql.You получить последние% дней, которые бронировали список из Curr ent date

select count(userid), userid 
from tbl_reservations 
where (book_date > DATE_ADD(CURDATE(), INTERVAL -5 DAY) and  book_date<=CURDATE()) 
group by userid 
having count(*) = 5; 
Смежные вопросы