MS Access 中的近似 Vlookup 函数?

approximate Vlookup function in MS Access?

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

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

0:00; 0:00

5:31; 0:15

7:01; 0:30

9:01; 1:00

在 Excel 中,我可以使用 Vlookup,设置为使用近似时间。例如,如果有一天持续时间为 7:42,Vlookup 将 return“0:30”,转到最接近的较低值 7:01 和 return正在 0:30。 Access的查询window中的公式编辑器中是否有解决这个问题的功能,或者Access只是缺少这种可能性?我只是对此很好奇。

如果您的 table 字段数据类型是 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;

嵌套查询可以return中断时间:

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 & "#")

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

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;