繁体   English   中英

如何在Access SQL上检查是否等于或大于日期

[英]How to check newer than or equal to a date on access SQL

目前我有两个表,使用Access 2007

TimeSheet(empID,TimeSheet,小时)和费率(empID,Rate,PromotionDate)

如何根据员工的晋升日期选择正确的开票费率? 例如,我有

Rates(001,10,#01/01/2013#)

Rates(001,15,#01/05/2013#)

Rates(002,10,#01/01/2013#)

Timesheet(001,#02/01/2013#,5)

Timesheet(001,#02/05/2013#,5)

Timesheet(002,#02/01/2013#,7)

在这种情况下,我想表明,如果empID 001在2013年2月1日提交了时间表,则其费用为$ 10 / hr,但从5月1日开始的时间表将为$ 15 / hr

我现在的查询是

SELECT t.empID , t.timesheet, r.hours , 
    (SELECT rate FROM rate WHERE t.timeSheet >= r.promotionDate) AS RateBilled 
FROM rate AS r , timesheet AS t
WHERE r.empid = t.empid

运行时,它显示一条消息“此子查询最多可以返回一条记录”

任何帮助,将不胜感激,谢谢。

编辑:

我使用sql有一些奇怪的输出

SELECT t.empID, t.timesheet, r.rate AS RateBilled
FROM Rates AS r, timesheet AS t
WHERE r.empid=t.empid And t.timeSheet>=r.promotionDate
GROUP BY t.empID, t.timesheet, r.rate, r.promotionDate
HAVING r.promotionDate=MAX(r.promotionDate);

结果

如您所见,对于empID 1计费的输出表正在从10到15来回切换,即使在5月1日之后,它都应该使用15,

任何帮助表示赞赏,谢谢。

您设置的select子查询可能返回多个值,其中仅应返回一个。 考虑到可能存在两次促销和最近的时间表的情况,则选择将返回两个值,因为在两种情况下,时间表都比促销新。

尝试将以下内容用作您的子查询:

SELECT TOP 1 rate FROM rate 
WHERE t.timeSheet >= r.promotionDate
ORDER BY r.promotionDate DESC

注意:我认为上述方法效率不高。 而是尝试类似

SELECT t.empID , t.timesheet, r.hours , r.rate AS RateBilled
FROM rate AS r , timesheet AS t
WHERE r.empid = t.empid AND t.timeSheet >= r.promotionDate
GROUP BY t.empID, t.timesheet
HAVING r.promotionDate = MAX( r.promotionDate);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM