MS Access 仅查询 select 个最新日期
MS Access queries to select latest dates only
我有一个包含 2 个表的数据库,我正在尝试构建一个简单查询以 return 每个项目的最新成本。
样本:
ID, Name, Cost, Effective Date
1...Item1...5...7/1/16
2...Item1...4...6/1/16
3...Item2...6...8/1/16
4...Item1...2...9/1/16
应该return只有第 3 行(Item2)和第 4 行(Item1 的最新)。
使用 Access 界面,只有在我根本不包括成本的情况下,我才设法让它工作,而且我无法在不让 Access 崩溃的情况下从 GROUP BY
行中删除成本。感谢您的帮助!
SQL 查看:
SELECT Item.Item_ID, Item.Item_Name, Rate_Changes.Cost, Max(Rate_Changes.Effective_Date) As MaxOfEffective_Date
FROM Item INNER JOIN Rate_Changes ON Item.Item_ID = Rate_Changes.Item_ID
WHERE Item.Active=True
GROUP BY Item.Item_ID, Item.Active, Item.Item_Name,
Rate_Changes.Cost, Rate_Changes.Effective_Date
这是一种方法:
SELECT i.Item_ID, i.Item_Name, rc.Cost, rc.Effective_Date
FROM Item as i INNER JOIN
Rate_Changes as rc
ON i.Item_ID = rc.Item_ID
WHERE i.Active = True AND
rc.Effective_Date = (SELECT MAX(rc2.Effective_Date)
FROM Rate_Changes as rc2
WHERE rc2.Item_Id = i.Item_id
);
这假定给定项目没有重复的生效日期。
编辑:
如果您确实有重复项,您可以这样做:
SELECT i.Item_ID, i.Item_Name, rc.Cost, rc.Effective_Date
FROM Item as i INNER JOIN
Rate_Changes as rc
ON i.Item_ID = rc.Item_ID
WHERE i.Active = True AND
rc.Effective_Date = (SELECT TOP 1 rc2.Effective_Date
FROM Rate_Changes as rc2
WHERE rc2.Item_Id = i.Item_id
ORDER BY rc2.Effective_Date DESC, rc2.id DESC
);
我有一个包含 2 个表的数据库,我正在尝试构建一个简单查询以 return 每个项目的最新成本。
样本:
ID, Name, Cost, Effective Date
1...Item1...5...7/1/16
2...Item1...4...6/1/16
3...Item2...6...8/1/16
4...Item1...2...9/1/16
应该return只有第 3 行(Item2)和第 4 行(Item1 的最新)。
使用 Access 界面,只有在我根本不包括成本的情况下,我才设法让它工作,而且我无法在不让 Access 崩溃的情况下从 GROUP BY
行中删除成本。感谢您的帮助!
SQL 查看:
SELECT Item.Item_ID, Item.Item_Name, Rate_Changes.Cost, Max(Rate_Changes.Effective_Date) As MaxOfEffective_Date
FROM Item INNER JOIN Rate_Changes ON Item.Item_ID = Rate_Changes.Item_ID
WHERE Item.Active=True
GROUP BY Item.Item_ID, Item.Active, Item.Item_Name,
Rate_Changes.Cost, Rate_Changes.Effective_Date
这是一种方法:
SELECT i.Item_ID, i.Item_Name, rc.Cost, rc.Effective_Date
FROM Item as i INNER JOIN
Rate_Changes as rc
ON i.Item_ID = rc.Item_ID
WHERE i.Active = True AND
rc.Effective_Date = (SELECT MAX(rc2.Effective_Date)
FROM Rate_Changes as rc2
WHERE rc2.Item_Id = i.Item_id
);
这假定给定项目没有重复的生效日期。
编辑:
如果您确实有重复项,您可以这样做:
SELECT i.Item_ID, i.Item_Name, rc.Cost, rc.Effective_Date
FROM Item as i INNER JOIN
Rate_Changes as rc
ON i.Item_ID = rc.Item_ID
WHERE i.Active = True AND
rc.Effective_Date = (SELECT TOP 1 rc2.Effective_Date
FROM Rate_Changes as rc2
WHERE rc2.Item_Id = i.Item_id
ORDER BY rc2.Effective_Date DESC, rc2.id DESC
);