时间:2018-06-22 19:49:40

标签: mysql sql select

我在打开和关闭时间位于不同行的位置存储数据。数据的组织方式如下:

id   type   mon       tues       wed       ...
1    OPEN   09:30:00  09:30:00   10:00:00
1    CLOSE  22:00:00  22:00:00   21:00:00
2    OPEN   09:00:00  09:00:00   09:00:00 
2    CLOSE  22:00:00  22:00:00   21:00:00 

数据经过组织,因此打开和关闭时间(以本地时间)位于不同的行上。

我正在尝试创建一个选择查询,该查询将输出如下数据:

id   mon       tues       wed ...
1    12.5      12.5       11 
2    13        13         12

其中输出值= TIME_TO_SEC(TIMEDIFF(CLOSE_time, OPEN_time))/3600.0。换句话说,商店营业时间。打开和关闭时间在不同的行上的事实真的让我失望。谢谢!

2 个答案:

答案 0 :(得分:1)

一种方法使用timestampdiff()

select id,
       timestampdiff(minute, topen.mon, tclose.mon) / 60 as mon,
       timestampdiff(minute, topen.tue, tclose.tue) / 60 as tue,
       . . .
from t topen join
     t tclose
     on topen.id = tclose.id and topen.type = 'OPEN' and tclose.type = 'CLOSE';

答案 1 :(得分:1)

可以通过Self JOIN解决此问题

select * from store s1 join store 
 s2 on s1.storeId = s2.storeId ;

所以自我加入后,结果集看起来就像

id   s1.type   s1.type      s1.mon   s2.mon          s1.tues    s2.tues         
 1    OPEN     CLOSE       09:30:00   09:30:00        09:30:00  10:00:00

在自我加入同一行中的打开和关闭行之后,您会看到,因此您可以应用函数来计算时间