Как запросить только старые и дублированные данные из базы данных в SQL - PullRequest
1 голос
/ 28 марта 2019

Я пытаюсь выполнить запрос к своей базе данных, чтобы извлечь только дублированные / старые данные для записи в чистую секцию в Excel (с помощью макроса, передающего SQL в БД).

На данный момент я сейчас нахожусьтестирование только в Access, чтобы отфильтровать только старые данные.

Во-первых, я пытаюсь отфильтровать свою базу данных по заданным WorkOrder, RunNumber и Row.

Приведенный ниже код фильтрует только поПорядок работы, RunNumber и Row.... но SQL не нравится, когда я придерживаюсь второго оператора AND;так что в настоящее время это не работает.

SELECT *
FROM DataPoints
WHERE (((DataPoints.[WorkOrder])=[WO2]) AND ((DataPoints.[RunNumber])=6) AND ((DataPoints.[Row]=1)

Как только я вычислю эту часть ...

Тогда, если есть только 1 запись с указанными WorkOrder, RunNumber и Row, тогдаЯ хочу отфильтровать это.(он не нужен в блокноте, потому что его данные уже записаны в основной раздел моего отчета)

Если есть 2 или более записей с указанными критериями (WO, RN и Row), то яхотите отфильтровать самую новую запись на основе RunDate и RunTime и сохранить только все более старые записи.

Например, в приведенном ниже ролике.Единственным элементом, оставшимся в моем фильтрованном запросе, будет верхняя запись с отметкой времени 11:47:00.

Sample data snippet.

Есть ли какие-либо рекомендуемые команды для решения этой проблемы?Любые идеи полезны.Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Я бы предложил что-то вроде следующего:

select t.* 
from datapoints t 
where 
    t.workorder = [WO2] and 
    t.runnumber = 6 and 
    t.row = 1 and
    exists
    (
        select 1 
        from datapoints u 
        where 
            u.workorder = t.workorder and
            u.runnumber = t.runnumber and
            u.row = t.row and
            (u.rundate > t.rundate or (u.rundate = t.rundate and u.runtime > t.runtime))
    )

Здесь, если коррелированный подзапрос в предложении where находит запись с такими же workorder, runnumber и row, но с более поздним rundate или с тем же rundate и более поздним runtime запись возвращается по основному запросу.

0 голосов
/ 28 марта 2019

Вам нужно еще два) в конце вашего фрагмента кода. Или же вы можете полностью удалить скобки в этом примере, MS Access добавит их обратно, если сочтет это необходимым.

M.S.,. Доступ к SQL может быть сложным, так как он не соответствует стандартам и не допускает сверхсложных запросов, или требует уродливого обходного решения, например кошмарных скобок, когда пытается соединить более двух таблиц.

По этим причинам я предлагаю использовать несколько запросов Access для получения ваших результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...