从最近一小时选择数据,MS Access

3

我正在进行一些数据转移,将数据从一个数据库移动到另一个数据库,并希望在不占用计算机太多内存的情况下完成。目前程序每分钟运行一次,但我想改变这种情况,以便每小时获取一次数据。最终,我想改变以下查询方式,不仅仅获取最新值,而是获取过去一小时的数据:

SELECT Data.[Date / Time],
       DATA.[Hot Strip Mill Total],
       Data.[Basic Oxygen Furnace Total],
       Data.[Electro-Arc Furnace Total],
       Data.[J-9 Shop Total],
       Data.[Levy Maintence Building Total],
       Data.[Ford Body Shop Total],
       Data.[Ford Chiller Building Total],
       Data.[Ford Dearborn W Plant Total],
       Data.[Ford Dearborn E Plant Total], 
       Data.[Ford Dearborn Balcony Total], 
       Data.[Ford Final Assembly Total],
       Data.[Ford Frame Plant Total], 
       Data.[Ford Dearborn N Plant Total],
       Data.[Ford Tool and Die Total], 
       Data.[Ford Paint Plant Total],
       Data.[Ford Glass Plant Total], 
       DATA.[Hot Strip Mill Rate], 
       Data.[Basic Oxygen Furnace Rate], 
       Data.[Electro-Arc Furnace Rate],
       Data.[J-9 Shop Rate],
       Data.[Levy Maintence Building Rate],
       Data.[Ford Body Shop Rate],
       Data.[Ford Chiller Building Rate],
       Data.[Ford Dearborn W Plant Rate],
       Data.[Ford Dearborn E Plant Rate],
       Data.[Ford Dearborn Balcony Rate],
       Data.[Ford Final Assembly Rate],
       Data.[Ford Frame Plant Rate],
       Data.[Ford Dearborn N Plant Rate],
       Data.[Ford Tool and Die Rate],
       Data.[Ford Paint Plant Rate],
       Data.[Ford Glass Plant Rate]
       FROM DATA  
       WHERE Format(Data.[Date / Time], 'mm/dd/yyyy hh:nn:ss') >=
           (select Format(max(Data.[Date / Time]),'mm/dd/yyyy hh:nn:ss') from Data);

比如说,现在是上午10:51:00,我的程序正在运行,我希望它返回从09:51:00到现在的数据,同样的,在上午11:51:00时,返回从10:51:00到11:51:00之间的数据。我对Access不是很熟悉,但我在查询方面还是比较有能力的。这个问题让我感到困惑。有人能帮忙理解如何完成吗?谢谢。

3个回答

3

由于1天=1,因此1小时=1/24。 所以,只是为了好玩,你甚至可以将你的状态表示为

WHERE Data.[Date / Time] >= (Now()-1/24)

1
+1 我喜欢这个答案,它促使我们思考日期/时间值的实际含义。似乎应该有更好的表达方式,但我想不出来:“因为1天=1”。 - HansUp
@HansUp - 不确定自己当时在想什么。我现在有点困惑。 - Aducci
谢谢,这正是我在寻找的。我不知道sysdate的等效物是什么。这是我在Oracle中处理它的方式,但我不知道如何在MS Access中处理。再次感谢。 - LaDante Riley
这个答案真的很有帮助,简单明了! - Charles

2
如果您的Data.[Date / Time]数据类型是日期/时间,则在使用基于日期的比较中不需要应用Format()来使用这些值。
WHERE Data.[Date / Time] >= DateAdd("h",-1, Now())

那种方法可能比在表的每一行中都使用Format()快得多,特别是如果[日期/时间]字段被索引。
我不确定你在这句话中的意思是什么:
"同样在上午11:51:00,返回大于10:51:00直到上午11:51:00的数据。"
如果这意味着在上午11:51:00时,您的Data表可能包括具有晚于上午11:51:00的[日期/时间]值的行,则可以在WHERE子句中添加另一个条件来排除它们。
WHERE Data.[Date / Time] >= DateAdd("h",-1, Now()) AND Data.[Date / Time] < Now()

0
WHERE Format(Data.[Date / Time], 'mm/dd/yyyy hh:nn:ss') >= DateAdd("h",-2, Now())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接