2015-07-18 3 views
4

я следующие данные конкретного пользователя - Таблица Темп -Поиск макс непрерывной полосы и текущая полоса от DateTime

time_stamp 
2015-07-19 10:52:00 
2015-07-18 10:49:00 
2015-07-12 10:43:00 
2015-06-08 12:32:00 
2015-06-07 11:33:00 
2015-06-06 10:05:00 
2015-06-05 04:17:00 
2015-04-14 04:11:00 
2014-04-02 23:19:00 

Таким образом, выход для запроса должен быть - Maximum streak = 4, Current streak = 2

Максимальная полоса = 4 из них -

2015-06-08 12:32:00 
2015-06-07 11:33:00 
2015-06-06 10:05:00 
2015-06-05 04:17:00 

И ток полоски 2 из них (Предполагаешься, что текущая дата 2 015-07-19) -

2015-07-19 10:52:00 
2015-07-18 10:49:00 

EDIT: Я хочу простой SQL запроса для MYSQL

+1

Пожалуйста, включите ваши РСУБД –

+2

StackOverflow не * Я хочу код, дайте мне код * вид веб-сайта. Это больше похоже на то, что я хочу добиться этого, я пробовал следовать, и вот где я застрял. *. Покажите, что вы попробовали, расскажите, какая у вас проблема с вашим подходом. – MarcinJuraszek

+1

@MarcinJuraszek смешно. Основатель сайта задал аналогичный вопрос и не включил его. http://stackoverflow.com/q/1176011/73226 –

ответ

0

Общий подход с пробелами и островами запросами является помечать каждую строку с его рангом в данных и его рейтинг в полном списке дат. Все кластеры будут иметь такую ​​же разницу.

Предостережения: я не знаю, будет ли этот запрос эффективным. Я не помню, поддерживает ли MySQL скалярные подзапросы. Я не искал способ рассчитать дневной интервал в MySQL.

select user_id, max(time_stamp), count(*) 
from (
    select 
     t.user_id, t.time_stamp, 
     (
      select count(*) 
      from T as t2 
      where t2.user_id = t.user_id and t2.time_stamp <= t.time_stamp 
     ) as rnk, 
     number of days from t.time_stamp to current_date as days 
    from T as t 

) as data 
group by usr_id, days - rnk