2017-02-01 11 views
2

У меня есть запрос, возвращающий следующую информацию. Я использовал Over (PARTITION BY для включения номеров строк). Я захватываю каждый раз, когда мой work_center_S начинает новый Order #, но я хочу исключить начало нового порядка, когда part_number был таким же, как и предыдущий порядок/строка Я не могу использовать функцию DISTINCT, потому что part_number может появляться много раз в день, и мне нужно будет записывать каждый раз, когда произойдет такое изменение.Omit Duplicate Only When In Sequential Order

[! [Запрос возврата] [1]] [1 ] [1]: https://i.stack.imgur.com/IKvsR.jpg

+----+--------+---------------+-------------+------+ 
| rn | Order# | work_center_S | part_number | Hour | 
+----+--------+---------------+-------------+------+ 
| 1 | 7098 | TB312   | 37203  | 1 | 
+----+--------+---------------+-------------+------+ 
| 2 | 8797 | TB312   | 37194  | 4 | 
+----+--------+---------------+-------------+------+ 
| 3 | 8802 | TB312   | 37355  | 11 | 
+----+--------+---------------+-------------+------+ 
| 4 | 0946 | TB312   | 37194  | 15 | 
+----+--------+---------------+-------------+------+ 
| 5 | 0698 | TB312   | 37203  | 18 | 
+----+--------+---------------+-------------+------+ 
| 6 | 0699 | TB312   | 37203  | 21 | 
+----+--------+---------------+-------------+------+ 
+2

Пожалуйста, всегда указывайте версию SQL Server, который вы используете. Например, 'LAG' /' LEAD' может пригодиться, но если вы используете SQL Server 2000 (и мы должны были бы догадаться). –

+0

Я использую SQL Server 2016. Я все еще пытаюсь выяснить, как заставить stackoverflow правильно отображать результаты возврата. Если отображаются мои результаты запроса, то это rn 6, которого не должно быть, потому что, в то время как у rn 5 и rn 6 есть другой Order #, оба Order # для одного и того же part_number. Что касается бизнес-правил для этого, причина этого заключается в том, что некоторые work_center_S могут создавать только один номер_объекта, но они не могут работать с одним порядком # неограниченно. Но изменение в part_number является значительным событием, которое мне нужно захватить. –

+0

Ну, это не должно быть фрагментом кода для отображения простых табличных результатов, я думаю. См. [Расширенная справка для редактора] (http://stackoverflow.com/editing-help). –

ответ

2

Я полагаю, не -1 PART_NUMBER

select Order#,work_center_S,part_number,Hour 

from (select * 
       ,lag(part_number,1,-1) over 
       (
        partition by work_center_S 
        order by  Hour 
       ) as prev_part_number 

     from mytable 
     ) t 

where part_number <> prev_part_number 

-

+--------+---------------+-------------+------+ 
| Order# | work_center_S | part_number | Hour | 
+--------+---------------+-------------+------+ 
| 7098 | TB312   | 37203  | 1 | 
+--------+---------------+-------------+------+ 
| 8797 | TB312   | 37194  | 4 | 
+--------+---------------+-------------+------+ 
| 8802 | TB312   | 37355  | 11 | 
+--------+---------------+-------------+------+ 
| 946 | TB312   | 37194  | 15 | 
+--------+---------------+-------------+------+ 
| 698 | TB312   | 37203  | 18 | 
+--------+---------------+-------------+------+ 
+0

Час может обернуться вокруг, возможно, столбец 'rm' - лучший выбор для заказа, но это то, что должен знать OP. – dlatikay

+1

@dlatikay, правый, но 'rn' был создан OP для этой записи. Предложение 'rn' OVER должно использоваться для функции LAG –

+0

Спасибо. Это подходит для меня. –