[OK]を、誰もが簡単であると言いません...行きましょうことができます。これはギャップと島の問題です。 postges sqlで簡単に解決できると私に言いましょう
あなたのシナリオにmysql変数を適用します。
私はSQL Fiddleにそれを解決:
のMySQL 5.6スキーマのセットアップ:
create table t (user_id int, booking_date date);
insert into t values
( 3, '2017-01-10'),
( 3, '2017-01-11'),
( 3, '2017-01-12'),
( 3, '2017-01-13'),
( 3, '2017-01-14'),
( 4, '2017-01-19'),
( 4, '2017-01-20'),
( 4, '2017-01-21'),
( 4, '2017-01-22'),
( 3, '2017-02-14'),
( 3, '2017-02-15');
クエリ1:
select user_id, min(booking_date), max(booking_date)
from (
select t1.user_id,
t1.booking_date,
@g := case when(
DATE_ADD(@previous_date, INTERVAL 1 DAY) <> t1.booking_date or
@previous_user <> t1.user_id)
then t1.booking_date
else @g
end as g,
@previous_user:= t1.user_id,
@previous_date:= t1.booking_date
from t t1, (select
@previous_user := -1,
@previous_date := STR_TO_DATE('01/01/2000', '%m/%d/%Y'),
@g:=STR_TO_DATE('01/01/2000', '%m/%d/%Y')) x
order by user_id, booking_date
) X
group by user_id, g
Results:
| user_id | min(booking_date) | max(booking_date) |
|---------|-------------------|-------------------|
| 3 | 2017-01-10 | 2017-01-14 |
| 3 | 2017-02-14 | 2017-02-15 |
| 4 | 2017-01-19 | 2017-01-22 |
説明各範囲についてネストされたクエリ図アップgroup code
(g
)。外部クエリは、各グループの最大値と最小値を取得します。
サンプルに基づいて完全な結果を提供してください。 –
特定の予約の全範囲を定義する予約IDはありませんか? – isaace
ありがとうございました。ありがとうございました。私は言い逃れました。MRonlineからの回答は、私から – Sark