Частично сгруппировать записи в доступе - PullRequest
0 голосов
/ 08 мая 2018

У меня есть таблица необработанных данных, в которой хранится снимок ежедневного заказа, и я работаю над этим, чтобы сгруппировать последовательные записи заказов с одинаковой информацией, чтобы вернуть запрос, в котором показаны только изменения каждого заказа.и дата изменения для дальнейшего анализа.

Необработанные данные, как показано ниже:

Order no.     Date      ETD     Destination<br/>
      01    5/1/2018  7/09/2018     City A<br/>
      01    5/2/2018  7/16/2018     City A<br/>
      01    5/3/2018  7/16/2018     City A<br/>
      01    5/4/2018  7/09/2018     City A<br/>
      01    5/5/2018  7/09/2018     City A<br/>
      01    5/6/2018  7/09/2018     City A<br/>

И я хотел бы, чтобы результат был:

Order no.     Date      ETD     Destination<br/>
      01    5/1/2018  7/09/2018     City A<br/>
      01    5/2/2018  7/16/2018     City A<br/>
      01    5/4/2018  7/09/2018     City A<br/>

MyТекущий подход заключается в использовании VBA для циклического прохождения отсортированного набора данных по одному для сравнения каждой записи с предыдущей и извлечения ее в другую таблицу, если она отличается.

Поскольку записей слишком много, производительность - времязатрат, и я хотел бы спросить, есть ли другое лучшее решение.

Я попытался использовать подзапрос для связи с данными предыдущего дня для сравнения, и это, кажется, намного медленнее.

Спасибо за поддержку.

1 Ответ

0 голосов
/ 08 мая 2018

Если даты являются последовательными без пробелов - как в ваших примерах данных - вы должны:

select t.*
from t left join
     t tprev
     on t.orderno = tprev.orderno and t.date = dateadd("d", 1, tprev.date)
where tprev.orderno is null or
      (tprev.etd <> t.etd or tprev.destination <> t.destination);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...