所以我有一个数据库来跟踪资产的位置变化。每次填写表单时,它都会自动为每次位置更改创建一个日期和时间戳。
列看起来像这样。
[Serial Number][New Location][Date][Time]例如:“
[DE1234567][Warehouse][5/7/2014][10:02PM]我现在要做的是创建一个查询,该查询将显示当前在这些位置的所有资产。
[Location1][serial1][Date/Time]
[Location1][serial2][Date/Time]
[Location1][serial5][Date/Time]
[Location1][serial7][Date/Time]
[Location2][serial4][Date/Time]
[Location2][serial6][Date/Time]
[Location2][serial8][Date/Time]
[Location2][serial9][Date/Time]或者其他类似的东西。
我需要做的是让查询找到每个序列号的最后一个日期条目,并且只显示该条目,而忽略任何较旧的条目。我不能删除旧的,因为我需要每个资产的历史记录。
附注:我不使用任何旧的资产跟踪软件的原因是,在未来,这也将用于跟踪这些资产的内部维修,回答这个问题也将有助于我以后这样做。
谢谢
2014年5月8日12:35
通过"GeoB“从答案中尝试了此代码。仍然显示刚刚排序的相同数据。
SELECT [Cassette Status History].[New Location], [Cassette Status History].[Serial Number], Max([Cassette Status History].[Date/Time]) AS [Last Date/Time]
FROM [Cassette Status History]
GROUP BY [Cassette Status History].[New Location], [Cassette Status History].[Serial Number];这显示了所有条目只是排序和分组。我希望此查询隐藏来自相同序列号的所有条目,但具有最新日期的条目。
增加了2014年5月8日9:29
我根据"Heinzi“的回答尝试了这个代码。
SELECT [Cassette Status History].[New Location], [Cassette Status History].[Serial Number], [Cassette Status History].[Date/Time]
FROM [Cassette Status History]
WHERE [Cassette Status History].[Date/Time] = (SELECT MAX([Cassette Status History].[Date/Time])
FROM [Cassette Status History]
WHERE [Cassette Status History].[Serial Number] = [Cassette Status History].[Serial Number])现在只显示输入到该表中的最后一个条目。
再次感谢大家的帮助!
发布于 2014-05-08 13:18:07
您需要Date/Time是此序列号的最高值的所有记录。因此,让我们将其直接转换为SQL:
SELECT A.[New Location], A.[Serial Number], A.[Date/Time]
FROM [Cassette Status History] A
WHERE A.[Date/Time] = (SELECT MAX(B.[Date/Time])
FROM [Cassette Status History] B
WHERE A.[Serial Number] = B.[Serial Number])或者,如果要使用查询设计器,则可以将问题分解为更小的部分:
LastMovements,其中只包含Serial Number和该序列号的最大Date/Time。这与您已有的查询类似,只是没有位置。LastMovement连接到Cassette Status History以添加位置的新查询。发布于 2014-05-08 11:45:35
创建新的查询设计并切换到SQL视图。复制以下内容:
SELECT yourtable.[New Location], yourtable.[Serial Number], Max([yourtable.Date]+[yourtable.Time]) AS Timestamp
FROM yourtable
GROUP BY tTest.[New Location], tTest.[Serial Number];添加日期和时间字段以构成完整的时间戳。
在Design View中,您将看到如何构建查询。
注意:以上假设ACC2013与ACC2010基本相似
发布于 2014-05-09 12:14:16
我能够弄明白这一点。我花了几个小时玩它,但至少我现在因为它变得更聪明了。
这是我正在使用的代码。
SELECT First([Cassette Status History].[New Location]) AS [FirstOfNew Location], [Cassette Status History].[Serial Number], Max([Cassette Status History].[Date/Time]) AS [MaxOfDate/Time]
FROM [Cassette Status History]
GROUP BY [Cassette Status History].[Serial Number]
ORDER BY First([Cassette Status History].[New Location]);我在设计视图中这样做,首先制作了一个只显示序列号的表,其中Total设置为"Group By“,日期/时间设置为"Max”,然后我在New Location字段中添加了额外的信息,使用设置为" first“的合计,并按升序排序。
现在我看到它似乎真的很简单……
谢谢大家的帮助,我学到了很多!
https://stackoverflow.com/questions/23531570
复制相似问题