如何检查访问SQL上的日期是否等于或等于日期

时间:2013-12-04 20:00:20

标签: sql ms-access-2007

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

TimeSheet(empID,TimeSheet,hours) 和 率(EMPID,速率,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年1月2日提交时间表,那么它将以10美元/小时收费 ,但他从5月1日开始的时间表将以15美元/小时计费

我现在的查询是

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

results

你可以看到empID 1的输出表费率是从10到15之间来回切换,即使在5月1日之后,它应该全部使用15,

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

1 个答案:

答案 0 :(得分:1)

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

尝试使用以下作为子查询:

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

N.B。我不认为上述内容非常有效。而是尝试像

这样的东西
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);