【发布时间】:2016-10-31 03:45:16
【问题描述】:
我很难找出一个针对与存储有效日期的表相关的表中的记录的查询。
假设我有这三个表:
tblProjects
-----------
id
tblTickets
----------
id
projectID
ticketNumber
ticketDate
tblRates
--------
id
projectID
effectiveDate
payRate
我要做的是创建一个查询,根据 ticketDate 测试 Rates 表的 EffectiveDate,并找到
所以 tblTickets 可能有:
id projectId ticketDate ticketNumber
-----------------------------------------------------------
1 1 2016/08/11 990
2 1 2016/09/12 991
3 1 2016/10/22 992
4 1 2016/10/23 993
5 2 2016/08/15 750
6 2 2016/09/08 751
和 tblRates 可能有:
id projectId effectiveDate Rate
-----------------------------------------------------------
1 1 2016/08/01 $50
2 1 2016/10/01 $75
3 2 2016/06/01 $65
如果我要查询 projectId = 1 的所有票证,我希望看到如下内容:
projectId ticketNumber TicketDate Rate
------------------------------------------------------------------------
1 990 2016/08/11 $50
1 991 2016/09/12 $50
1 992 2016/10/12 $75
1 993 2016/10/23 $75
我什至不确定从哪里开始。我可以查询有效日期的最大值,但在上面的示例中只会返回 10/12 和 10/23 记录。我还可以简单地查询
非常感谢您朝正确的方向轻推!
编辑: 这是我当前的查询。它返回每个 Rates 的所有记录的副本。
SELECT
vRates.projectId
, tblTickets.TicketNumber
, tblTickets.TicketDate
, vRates.Rate
, vRates.effectiveDate
FROM (
( SELECT
vTempRates.effectiveFrom
, vTempRates.projectId
, vRates.Rate
FROM tblRates AS vTempRates
INNER JOIN
( SELECT
projectId
, MAX(effectiveFrom) AS effectiveDate
, Rate
FROM tblRates
GROUP BY projectId, Rate
) AS vRates
ON vTempRates.projectId = vRates.projectId
AND vTempRates.effectiveFrom = vRates.effectiveDate
) AS vRates
INNER JOIN tblProjects
ON vRates.projectId = tblProjects.id)
INNER JOIN tblTickets
ON tblProjects.id = tblTickets.projectId
WHERE (((tblProjects.id)=1));
【问题讨论】:
-
你使用的是什么数据库(包括版本)?
-
MS Access 2010 和 SQL Server 2016 之间的混合体。不过,我正在 Access 中编写查询。
标签: sql sql-server ms-access