2017-01-18 12 views
0

15分の時間間隔で適切な結果を生成するクエリがあります。複数の間隔でMySQLクエリを繰り返す方法

-- Query for the interval 10:00-10:15 
SELECT count(r.id) as nof_reservations_in_interval 
FROM reservations r 
LEFT JOIN assets a ON r.asset_id = a.id 
WHERE r.deleted_at is null 
AND a.type_id = 23 --just an ID 
AND r.start_utc <= '2017-02-21 10:15:00' 
AND r.end_utc >= '2017-02-21 10:00:00' 
-- result: 2 

私は間のこのクエリの結果を「表/関係」を作りたい場合は、同じ日10:00 18:00を言うことができます。どうすればそれを達成できますか?

私はちょうど間隔ごとにphpからステートメントを照会できます。私はこれを行うには、スマートMySQLの機能のいくつかの種類があった望んだ

望ましい結果の関係:):

interval_start | interval_end | nof_reservations_in_interval 
---------------+--------------+------------------------------ 
10:00   | 10:15  | 2 
10:15   | 10:30  | 3 
etc etc 

答えて

1

簡単な方法は、サブクエリを使用して間隔を定義することです:

SELECT t.time_start, t.time_end, count(r.id) as nof_reservations_in_interval 
FROM (SELECT time('10:10:00') as time_start, time('10:15:00') as time_end UNION ALL 
     SELECT time('10:15:00') as time_start, time('10:30:00') as time_end 
    ) t LEFT JOIN 
    reservations r 
    ON r.start_utc <= addtime('2017-02-21', t.time_end) AND 
     r.end_utc >= addtime('2017-02-21', t.time_start) LEFT JOIN 
    assets a 
    ON r.asset_id = a.id AND 
     a.type_id = 23 
WHERE r.deleted_at is null 
GROUP BY t.time_start, t.time_end; 

注:a.type_idの条件をleft joinが動作するようにonに移動しました。

+0

ニース!しかし、正しいテーブルを作成するために、10時から18時までの間隔を「手動で入力する」必要があります。 – stUrb

+0

正しい結果が得られないようです。私が知っているように、10:00〜10:15に2つの予約があります。クエリは0を返します。(10時10分のタイプミスを修正した後でも) – stUrb

+0

addtimeが正しく機能していないようです。それをconcat()に変更すると動作します。しかし、すべての可能な間隔を手動で入力するのは面倒だ。 – stUrb

関連する問題