Sql 如何从一个日期早于另一个表的表中联接最后一条记录?

Sql 如何从一个日期早于另一个表的表中联接最后一条记录?,sql,ms-access,Sql,Ms Access,这是我在这里的第一篇帖子,也是我第一个无法独自解决的问题。我有一个main表,其中包含字段:Date、MinutesActiveWork和其他不相关的字段。我还有第二个表,其中包含以下字段:ID、ID\u Workarea、GoalOfActiveMinutes、GoalActiveFrom 我想做一个查询,返回MainTable中的所有记录以及日期的活动目标。 例如: Maintable (Date = dd/mm/yyyy) ID Date ActvWrkMin W

这是我在这里的第一篇帖子,也是我第一个无法独自解决的问题。我有一个main表,其中包含字段:Date、MinutesActiveWork和其他不相关的字段。我还有第二个表,其中包含以下字段:ID、ID\u Workarea、GoalOfActiveMinutes、GoalActiveFrom

我想做一个查询,返回MainTable中的所有记录以及日期的活动目标。 例如:

Maintable (Date = dd/mm/yyyy)
ID      Date      ActvWrkMin    WrkAreaID
1    01-01-2019      45             1
2    02-01-2019      50             1
3    03-01-2019      48             1
我现在的问题非常接近我想要的。但问题是,查询输出的所有目标都小于MainTable的日期。这是有道理的,但我不知道键入什么条件来修复它。像这样:

IDMain     Date     ActvWrkMin     Goal     WrkAreaID
1       01-01-2019      45          45          1
2       02-01-2019      50          45          1
3       03-01-2019      48          45          1 <-- Dont want this one
3       03-01-2019      48          50          1
我知道我可以用Dlookup做得很简单,但这还不够快


谢谢你的建议

为此,我认为您必须使用下面提到的嵌套查询

select tblMain.id,tblMain.Date,tblMain.ActvWrkMin, tblMain.WrkAreaID,
(select top 1 Goal 
from GoalTable as gtbl 
where gtbl.id_workarea = 1 
and tblmain.[Date] >= gtbl.glActvFrm order by gtbl.glActvFrm desc) as Goal
from Maintable as tblMain
检查下图,查看由此查询生成的结果


我希望这能解决您的问题。

对不起。我的sql标准如下:tblMain.Date>=tblGoal.goalactivefrom非常感谢!这非常接近,但我不断收到一个错误,说EnterParamenterValue'Goal',我更改了您的建议以适合我的选项卡名,以及我希望在查询中显示的内容。也许这弄糟了什么选择tblMain.ID,tblMain.Dato,从VTBLMAALFOROMRADER中选择top 1 Goal作为gtbl,其中gtbl.idMaalomraade=1和tblMain.Dato>=gtbl.gaeldendfra按gtbl排序。从VtblSumpMain中选择Gaeldendfra desc作为目标作为tblMain```@iKindOfCode您可以分享您得到的确切错误或分享您的查询结果。你可以分享它的截图,以了解它的确切问题。我发现了!当我更改它时,我引用了错误的名称。您键入的SELECT Top 1目标与您键入的目标不在同一字段中。结果是:选择tblMain.ID,tblMain.Dato,从VTBLMAALFOROMRADER中选择前1名Maal作为gtbl,其中gtbl.idMaalOmraade=1和tblMain。[Dato]>=gtbl.gaeldendfra按gtbl排序。gaeldendfra desc作为目标从VtblSumpMain作为tblMain感谢您的帮助
IDMain     Date     ActvWrkMin     Goal     WrkAreaID
1       01-01-2019      45          45          1
2       02-01-2019      50          45          1
3       03-01-2019      48          45          1 <-- Dont want this one
3       03-01-2019      48          50          1
SELECT tblMain.Date, tblMain.ActiveWorkMins, tblGoal.Goal
FROM VtblSumpMain AS tblMain LEFT JOIN (
SELECT VtblGoalsForWorkareas.idWorkArea, VtblGoalsForWorkareas.Goal, VtblGoalsForWorkareas.GoalActiveFrom (THIS IS THE DATE FIELD)
FROM VtblGoalsForWorkareas
WHERE VtblGoalsForWorkareas.idWorkArea= 1) AS tblGoal ON tblMain.Date > tblGoal.GoalActiveFrom 
ORDER BY tblMain.Date
select tblMain.id,tblMain.Date,tblMain.ActvWrkMin, tblMain.WrkAreaID,
(select top 1 Goal 
from GoalTable as gtbl 
where gtbl.id_workarea = 1 
and tblmain.[Date] >= gtbl.glActvFrm order by gtbl.glActvFrm desc) as Goal
from Maintable as tblMain