mysql - 如何将与 MySQL 中计算工作时间相关的查询转换为 MS Access
问题描述
我想使用 MS Access 计算每天的工作时间。我在 MySQL 中查询了相同的东西,但这个东西在使用 pdo PHP 的 MS Access 中不起作用。
SELECT MachineNo, Empcardno, Date, SEC_TO_TIME(SUM(tsecs)) AS total_time
FROM (
SELECT CASE WHEN MachineNo = @mn AND Empcardno = @en AND `Date` = @dt
THEN @rn := @rn + 1
ELSE @rn := 1
END AS rn,
@mn := MachineNo AS MachineNo, @en := Empcardno AS Empcardno,
@dt := `Date` AS `Date`,
CASE WHEN @rn % 2 = 1 THEN -TIME_TO_SEC(`Time`)
ELSE TIME_TO_SEC(`Time`)
END AS tsecs
FROM timesheet
CROSS JOIN (SELECT @mn := 0, @en := 0, @dt := '', @rn := 0) init
ORDER BY Date, Time
) t
GROUP BY MachineNo, Empcardno, Date
如何将此查询转换为与使用 php 的 ms 访问 pdo 连接兼容
解决方案
这是一个查询,它将在 Access 上为您提供相同的结果。它使用不同的方法来生成行号,LEFT JOIN
在较短的时间使用 self 并计算较短时间的记录数。由于 Access 已经将时间存储为一天的小数部分,因此SUM
可以简化,我们FORMAT
可以将时间转换为HH:MM:SS
格式:
SELECT MachineNo, Empcardno, [Date],
FORMAT(SUM(IIF(rn MOD 2 = 0, -TimeValue([Time]), TimeValue([Time]))),'hh:nn:ss') AS total_time
FROM (
SELECT t1.MachineNo, t1.Empcardno, t1.Date, t1.Time, COUNT(t2.MachineNo) AS rn
FROM timesheet t1
LEFT JOIN timesheet t2 ON t2.MachineNo = t1.MachineNo
AND t2.Empcardno = t1.Empcardno
AND t2.Date = t1.Date
AND TimeValue(t2.Time) < TimeValue(t1.Time)
GROUP BY t1.MachineNo, t1.Empcardno, t1.Date, t1.Time
) AS t
GROUP BY MachineNo, Empcardno, Date
输出:
MachineNo Empcardno Date total_time
1 5 21/05/2020 08:19:12
1 5 22/05/2020 08:28:42
推荐阅读
- flutter - Flutter:Intellij 确实没有显示设备(但在 Android 项目中没有问题)
- locust - 蝗虫:request_success.fire 没有做任何事情
- r - 由于添加了数字,所以图例只有一半可见
- javascript - 使用可选的 jQuerys UI 时如何获取选定项目的列表?
- javascript - 与数组字符串一起使用时,Javascript 归档不起作用
- pine-script - 在 TradingView 策略的 alert_message 中应用 {{plot("Name")}}
- c++ - 完成 bool 设置为 true 后 For 循环不停止
- security - 多授权人支持
- node.js - Hyperledger Fabric 如何通过 mspid 管理授权
- c++ - 为什么复制构造函数和复制赋值运算符调用“memcpy”,而移动ctor和移动赋值运算符调用“memmove”