0

我有一张这样的桌子:

    day      start        end
2013-01-02  08:00:00    12:00:00
2013-01-02  16:00:00    18:00:00
2013-01-02  23:00:00    03:00:00
2013-01-03  08:00:00    12:00:00
2013-01-03  16:00:00    18:00:00
2013-01-03  23:00:00    03:00:00

我想要做的是选择表格,结果如下:

     day      start        end
2013-01-02  12:00:00    16:00:00
2013-01-02  18:00:00    23:00:00

显示我在那个时间表上的空闲时间,我已经尝试了几个小时无法实现如何做到这一点,请帮助

4

1 回答 1

0

你似乎只想要中间时间。所以你可以使用lead()

select day, end, nextstart
from (select t.*, lead(start) over (partition by day order by start) as nextstart
      from table t
     ) t
where end <> nextstart;

(注意:为了清楚起见,我没有对保留字进行转义。您不应该真正将列命名为endday哪些是保留字。)

例如,如果您想要 0:00-8:00,这将更具挑战性。

于 2014-05-17T17:07:30.430 回答