首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在access SQL上检查更新日期或等于日期

如何在access SQL上检查更新日期或等于日期
EN

Stack Overflow用户
提问于 2013-12-04 20:00:19
回答 1查看 109关注 0票数 0

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

TimeSheet(empID,TimeSheet,时数)和Rate(empID,Rate,PromotionDate)

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

代码语言:javascript
运行
复制
Rates(001,10,#01/01/2013#)

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

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

代码语言:javascript
运行
复制
Timesheet(001,#02/01/2013#,5)

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

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

在这种情况下,我想表明,如果empID 001在2013年02月01日提交一份时间表,它将以每小时10美元计费,但他从5月1日开始的时间表将以每小时15美元计费。

我现在的问题是

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
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,尽管已经过了2001年5月,它应该都使用15,

任何帮助都是非常感谢的,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-04 20:06:10

所设置的select子查询可能返回多个值,其中只应返回一个值。假设有两个晋升和一个最近的时间表,那么select将返回两个值,因为在这两种情况下,时间表都比升级更新。

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

代码语言:javascript
运行
复制
SELECT TOP 1 rate FROM rate 
WHERE t.timeSheet >= r.promotionDate
ORDER BY r.promotionDate DESC

注:我认为上述方法效率不高。相反,尝试一些类似的

代码语言:javascript
运行
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20384750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档