0

在 Access 中,我有一个表格,我可以在其中输入每天开始和完成工作的时间。从逻辑上讲,这两个数字可以让你计算出你工作了多长时间。在另一个表中,我目前有四个记录,根据我那天工作的时间来定义特定一天的午休时间,就像这样

最短工作时间;最少休息时间

0:00;0:00

5:31;0:15

7:01;0:30

9:01;1:00

在 Excel 中,我可以使用 Vlookup,设置为使用近似时间。例如,如果某一天的持续时间是 7:42,则 Vlookup 将返回“0:30”,然后转到最接近的较低值 7:01,然后返回 0:30。Access的查询窗口中的公式编辑器中是否有解决此问题的功能,还是Access只是缺少这种可能性?我对此非常好奇。

4

3 回答 3

0

嵌套查询可以返回中断时间:

SELECT tblWork.WorkTime, 
    Format((SELECT Max(MinimumBreak) FROM tblBreaks 
            WHERE MinimumWorkTime<=tblWork.WorkTime), "Short Time") AS BreakTime
FROM tblWork;

或者

SELECT tblWork.WorkTime, 
    Format((SELECT TOP 1 MinimumBreak FROM tblBreaks 
            WHERE MinimumWorkTime<=tblWork.WorkTime 
            ORDER BY MinimumBreak DESC), "Short Time") AS BreakTime
FROM tblWork;

但是,两者都会导致不可编辑的数据集,因此这对于报表来说是可以的,但对于数据输入表单来说是不行的。在文本框中使用域聚合函数表达式。

DMax("MinimumBreak", "tblBreaks", "MinimumWorkTime<=#" & Me.WorkTime & "#")
于 2021-08-17T06:35:14.593 回答
0

使用子查询查找休息时间:

SELECT 
    TableWork.Id, 
    TableWork.BeginTime, 
    TableWork.FinishTime, 
    CDate(FinishTime - BeginTime) AS WorkTime, 
    
    (Select Top 1 
        [Minimum break]
    From
        TableBreak
    Where
        [Minimum work time] <= ([FinishTime] - [BeginTime])
    Order By 
        [Minimum work time] Desc) AS BreakTime, 

    CDate([WorkTime] - [BreakTime]) AS NetTime
FROM 
    TableWork
ORDER BY 
    TableWork.Id;

在此处输入图像描述

于 2021-08-17T06:38:34.480 回答
0

如果您的表字段数据类型是Date/Time然后尝试下面的查询。

SELECT TOP 1 format(tblST.MinBrk,"hh:mm") as [Minimum Break]
FROM tblST
WHERE (((tblST.[MinWT])<=TimeSerial(7,42,0)))
ORDER BY tblST.MinWT DESC;

如果数据类型是Number然后尝试下面 -

SELECT TOP 1 tblST2.MinBrk as [Minimum Break]
FROM tblST2
WHERE (((tblST2.[MinWT])<=7.42))
ORDER BY tblST2.MinWT DESC;
于 2021-08-17T03:15:37.027 回答