2

mySQLテーブルから利用可能な上限の「時間範囲」をクエリしようとしています

+----+----------+---------+
| id | timefrom | timeto  | 
+----+----------+---------+
|  0 | 08:30    | 10:30   |
|  7 | 15:00    | 16:00   |
|  2 | 17:00    | 17:30   |
|  8 | 18:00    | 21:00   |
+----+----------+---------+

クエリの結果は、10:30 から 15:00 までの次の利用可能な時間範囲になります。

edit1: ID が連続していません

ありがとう!

4

2 に答える 2

2

これが必要だと思います:

select t1.`timeto`, min(t2.`timefrom`)
from
  yourtable t1 inner join yourtable t2
  on t1.`timeto`<t2.`timefrom`
group by t1.`timeto`
having
  not exists (select null from yourtable t3
              where t1.`timeto`<t3.`timeto`
              and min(t2.`timefrom`)>t3.`timefrom`)

(これは間隔が重ならない場合にのみ機能します)

于 2013-01-03T13:25:42.567 に答える
1

私は次のようなものを使用すると思います

SELECT
    t1.*,
    MIN(t2.`timefrom`) AS 'next (timefrom)',
    TIMEDIFF(MIN(t2.`timefrom`),t1.`timeto`) AS 'interval'
FROM `the_table` t1
LEFT OUTER JOIN `the_table` t2
ON t2.`timefrom` > t1.`timeto`
GROUP BY t1.`timefrom`,t1.`timeto`
#HAVING `next` IS NOT NULL

最後の行のコメントを外すことは、INNER JOIN代わりにLEFT OUTER JOINここを使用することと同じです。LOJ を選択した理由は、テーブル内のすべてのレコードを表示したかったからですが、もちろん、それはあなた次第です。

于 2013-01-03T14:00:43.170 に答える