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;
在 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;