【发布时间】:2014-04-15 03:24:17
【问题描述】:
我正在尝试返回员工姓名和奖励日期如果他们在用户指定的日期之前没有先前的奖励日期(这些是表单上的字段,StartDateTxt 和 EndDateTxt 可见下面),也就是他们的“第一次出现”。
示例(AwardTbl 仅为简单起见):
AwardDate EmployeeID PlanID AwardedUnits
3/1/2005 100200 1 3
3/1/2008 100200 1 7
3/1/2005 100300 1 5
3/1/2013 100300 1 8
如果我在日期 1/1/2005 - 12/31/2005 之间运行查询,它将返回 3/1/2005 和 100200 和 100300。如果我在 1/1/2008-12/31/2008 之间运行查询,它不会返回任何内容,1/1/2013 - 12/31/2013 也是如此,因为这些员工已经有更早的奖励日期。
我尝试了几种不同的方法,结果有些奇怪。
SELECT x.AstFirstName ,
x.AstLastName ,
y.AwardDate ,
y.AwardUnits ,
z.PlanDesc
FROM (AssociateTbl AS x
INNER JOIN AwardTbl AS y ON x.EmployeeID = y.EmployeeID)
INNER JOIN PlanTbl AS z ON y.PlanID = z.PlanID
WHERE y.AwardDate BETWEEN [Forms]![PlanFrm]![ReportSelectSbfrm].[Form]![StartDateTxt] And [Forms]![PlanFrm]![ReportSelectSbfrm].[Form]![EndDateTxt] ;
此查询不关心是否有以前的记录,我认为这就是我不确定如何缩小查询范围的地方。
我也试过了:
-
Min(AwardDate)(没用) -
WHERE子句中按TOP 1 AwardDate ASC排序的子查询,只返回1条记录 - 一个
DCount("*", "AwardTbl", "AwardDate < [Forms]![PlanFrm]![ReportSelectSbfrm].[Form]![StartDateTxt]") < 1(这也没有区分它是否是第一次出现的AwardDate)
请注意:这是 MS Access。没有ROW_NUMBER() 或CTE 功能。
【问题讨论】:
标签: sql ms-access-2007