实施例
| ID | LOGS |
| 1 | 8:00:00 | --this is time in,
| 1 | 12:00:00| --this is time out,
| 2 | 20:00:00| -- time in,
| 2 | 8:00:00 | -- time out,
我需要解决时间和时间之间的小时数。时间和超时可在1列中找到。我是MySQL的新手,想要练习这个。
答案 0 :(得分:0)
鉴于我目前所知道的......(这很接近,但考虑到一些缺失的组件,这在技术上是无法解决的)
我不认为这是“正确”的答案,因为我不确定日志数据类型,如果它包含日期字段或只是时间。如果只是时间我不确定如何考虑可能不同的天数;以及如何处理记录的排序,因为订单无法保证。
我也不确定你的数据是否缺少对以及我们如何处理它。说有人没有键入但键入或反之亦然。我们如何处理这种情况?
以下内容是使用用户变量(@ RN,@ RN2)模拟row_number功能,并为每条记录分配1,2,3,4 ..等RN。使用此行号生成两个相同的数据集。然后我将这些数据集连接在DS1.rownumber + 1 = DS2.rownumber上,数据集1的行号仅限于使用mod函数的奇数行。这意味着我们现在可以从date1中减去date2并获得差异。
SELECT ID, Col2DT, Col1DT, timestampDiff(Minute, COl2DT, Col1DT) as MinDiff
FROM (SELECT ID, Logs col1DT , @RN:=@RN+1 RN
FROM TableName
CROSS JOIN (SELECT @RN:=0)
ORDER BY ID, Logs Asc) Der_Tab1
INNER JOIN (SELECT ID, LogsCol2DT, @RN2:=@RN2+1 RN
FROM TableName
CROSS JOIN (SELECT @RN2:=0)
ORDER BY ID, Logs Asc) Der_Tab2
on Der_tab1.ID = Der_tab2.ID
and der_tab2.RN+1 = DerTab2.RN
WHERE mod(Der_tab1.RN,2)=1