gpt4 book ai didi

MySQL 使用 1 列解决时间输入和超时问题

转载 作者:行者123 更新时间:2023-11-29 17:55:34 25 4
gpt4 key购买 nike

例如。

| 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 新手,想练习一下。

最佳答案

据我目前所知...(这很接近,但由于缺少一些组件,这在技术上是无法解决的)

我认为这不是“正确”的答案,因为我不确定日志数据类型以及它是否包含日期字段或只是时间。如果只是时间,我不确定如何解释可能不同的天数;也不知道如何处理记录的排序,因为无法保证顺序。

我也不确定您的数据是否缺少对以及我们将如何处理。假设有人没有键入但键入了,反之亦然。我们如何处理这种情况?

下面的操作是使用用户变量(@RN、@RN2)模拟 row_number 功能,并为每个记录分配 1,2,3,4.. 等 RN。使用该行号生成两个相同的数据集。然后,我在 DS1.rownumber+1 = DS2.rownumber 上将这些数据集连接在一起,并且使用 mod 函数将数据集 1 的行号限制为奇数行。这意味着我们现在可以从 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
  • 交叉连接只是声明用户变量 @RN 和 @RN2 并将其初始化为 0
  • 假设 log 是时间戳数据类型,每个子查询的排序确保我们为每个 ID 分配正确的行号
  • mod(der_tab1.rn,2)=1 确保所有奇数行都在我的第一个 der_tab1 数据集中。这意味着,如果我们假设每个 ID 有两个输入/输出日志且不会失败,则基于连接的所有偶数都将位于第二个数据集 (der_tab2) 中,那么此方法将为我们提供需要减去的 1 条记录中的两个日期值
  • 然后外部选择进行数学计算并显示 ID、两个日期相减以及所得差异(以分钟为单位)。

关于MySQL 使用 1 列解决时间输入和超时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48885799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com