Выберите данные из последнего часа, MS Access
-
26-10-2019 - |
Вопрос
Я работаю над тем, чтобы сделать некоторые передачи данных, перемещающие данные из одной базы данных в другую, и я хотел бы сделать это, не используя большую память на компьютере, на которой я запускаю эту программу передачи данных. В настоящее время программа проводится каждую минуту, но я хочу изменить это, чтобы я собирал данные каждый час. В конечном счете, я хочу изменить следующий запрос, чтобы я не захватывал лишь наибольшую ценность, но я получаю данные, которые происходят из последнего часа:
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. Я не настолько семейен с доступом, но я вполне способен с запросами. Этот просто заставил меня проиграть. Может ли кто -нибудь помочь понять, как это сделать? Спасибо
Решение
С 1 дня = 1, поэтому 1 час = 1/24. Итак - просто для удовольствия - вы можете даже выразить свое состояние как
WHERE Data.[Date / Time] >= (Now()-1/24)
Другие советы
Если тип данных ваших данных. [Дата / время]-дата / время, вам не нужно применять Format () при использовании значений в сравнении с датой.
WHERE Data.[Date / Time] >= DateAdd("h",-1, Now())
Этот подход может быть намного быстрее, чем использование Format () с каждой строкой таблицы, особенно если поле [дата / время] индексируется.
Я не уверен, что вы имели в виду с этим предложением:
"Точно так же в 11:51:00 возвращайте данные с более чем 10:51:00 до 11:51:00."
Если это означает, что в 11:51:00 ваша таблица данных может включать в себя строки, которые имеют значения [дата / время] позже, чем в 11:51:00, вы можете добавить еще одно условие в предложение, чтобы исключить их.
WHERE Data.[Date / Time] >= DateAdd("h",-1, Now()) AND Data.[Date / Time] < Now()
WHERE Format(Data.[Date / Time], 'mm/dd/yyyy hh:nn:ss') >= DateAdd("h",-2, Now())