Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поля время приемки и время передачи из таблицы истории измения состояний  [new]
Шмель
Member

Откуда:
Сообщений: 8
Добрый день!
Имеется таблица истории изменения состояния учетной единицы, для примера возьмем мешки. В таблице присутствуют следующие столбцы:
- id строки
- id товара или его штрихкод (не принципиально)
- state_id, код состояния (при изменении состояния)
- modify_date, время изменения состояния
- others, другие поля (дата создания товара, пользователь, местонахождение и т.п.)

В простейшем случае под изменением состояния понимается:
1. прием товара в цех на хранение
2. передача товара в производство

Требуется создать таблицу с перечнем мешков, в которой присутствуют поля времени приемки и времени отправки в производство. Особенности жизненного цикла товара следующие:
1. товар может быть еще не принят
2. прием происходит один раз, но вариантов состояния приема два:
- state_id = 8, прием в обычном случае, когда есть связь и соответственно есть данные о товаре. Данные синхронизуются с другой БД.
- state_id = 10, прием товара когда нет данных о товаре из-за долгого отсутствия связи (нет синхронизации)
3. передача товара в производство, происходит один раз и также имеет два варианта:
- state_id = 11, передача в обычном случае, когда есть связь и соответственно есть данные о товаре.
- state_id = 12, передача товара, когда нет данных о товаре из-за долгого отсутствия связи.

Напрашивается создание двух представлений (view) по id товара, которое присоединяется к основной таблице мешков по id товара через JOIN LEFT. Одно представление по приему, другое по передачи товара в производство.
И вроде вопрос простой, во view как условие ставим - where (state_id = 8) OR (state_id = 10). Но есть маленькая деталь - в таблице истории изменения состояния может присутствовать две записи по приемке, т.е. не соблюдается однозначности по выборке времени приема. Такой случай возможен, если мы принимали товар без наличия дополнительных данных (state_id = 11) и сделали запись в таблицу истории изменения состояний. А после появления связи и синхронизации данные появились и состояние товара переходит в состояние (state_id = 8) с соответствующей записью в таблицу истории состояний. В этом случае время приемки должно определяться по (state_id = 11).

Предполагаю, что здесь (из двух состояний) можно выбирать учитывая время приемки (меньшее из двух), либо по номеру состояния (большее из возможных).
Правильно ли я понимаю, что в данном случае нужно поработать с GROUP BY "id товара" c функцией MIN/MAX в SELECT? Есть ли еще варианты?
25 дек 14, 19:15    [17053543]     Ответить | Цитировать Сообщить модератору
 Re: Поля время приемки и время передачи из таблицы истории измения состояний  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8828
Шмель,

не забудьте наложить условие ограничения уникальности для приёма. Вам необходимо исключить возможность двойной приёмки.
Никакие агрегации при этом не потребуются.
26 дек 14, 13:16    [17056893]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить