列中项目之间的差异

uhry853o  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(361)

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

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

对数据进行组织,以便打开和关闭时间(本地时间)位于不同的行上。
我正在尝试创建一个select查询,该查询将输出如下数据:

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

其中输出值= TIME_TO_SEC(TIMEDIFF(CLOSE_time, OPEN_time))/3600.0 . 换句话说,商店的营业时间。开盘时间和收盘时间在不同的一排,这一点真让我很反感。谢谢!

xkftehaa

xkftehaa1#

这个问题可以通过自连接来解决

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

所以在self-join之后

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

正如你所看到的,在自我连接后,打开和关闭行在同一行,所以你可以应用你的函数来计算时间

ou6hu8tu

ou6hu8tu2#

一种方法使用 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';

相关问题