我在打开和关闭时间位于不同行的位置存储数据。数据的组织方式如下:
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
。换句话说,商店营业时间。打开和关闭时间在不同的行上的事实真的让我失望。谢谢!
答案 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
在自我加入同一行中的打开和关闭行之后,您会看到,因此您可以应用函数来计算时间