Казалось бы, существует гораздо более простой способ сформулировать проблему. Пожалуйста, см. Редактировать 2, следуя образцу таблицы.
У меня есть несколько различных продуктов на производственной линии. У меня есть дата, когда каждый продукт поступил в производство. Каждый продукт имеет два идентификатора: номер изделия и серийный номер. У меня есть общее количество рабочих часов для каждого продукта по номеру изделия и серийному номеру (т.е. я могу сказать, сколько часов ушло на каждый изготовленный объект и какова средняя сборка. время для каждого вида объекта).
Я хочу определить, как (если) изменение продолжительности производственных циклов влияет на среднее время, необходимое для создания продукта (номер позиции). Производственный цикл - это последовательное производство нескольких серийных номеров для одного номера изделия. У нас есть исторические записи за несколько лет с производственными циклами, варьирующимися по длине от 1 до 30.
Я думаю, что для этого мне нужно назначить 'run id'. Для меня это означает создание запроса, который сортирует по дате начала и вычисляет новое уникальное значение при каждом изменении номера элемента. Если бы я знал, как это сделать, я мог бы решить остальную часть проблемы самостоятельно.
Так что предлагается ряд связанных вопросов:
- Думаю ли я об этом правильно?
- Если я на правильном пути, как мне сгенерировать эти значения идентификатора прогона? Рассчитать и сохранить это вариант, хотя у меня есть (ошибочно?) Предпочтение для прямых запросов. Я точно знаю, как создать номера прогонов в Excel, но у меня есть (ошибочное?) Предпочтение делать это в базе данных.
- Если я не на правильном пути, где я могу найти этот путь? :)
Edit:
Структура таблицы (упрощенная) с образцами данных:
AutoID Item Serial StartDate Hours RunID (proposed calculation)
1 Legend 1234 2010-06-06 10 1
3 Legend 1235 2010-06-07 9 1
2 Legend 1237 2010-06-08 8 1
4 Apex 1236 2010-06-09 12 2
5 Apex 1240 2010-06-10 11 2
6 Legend 1239 2010-06-11 10 3
7 Legend 1238 2010-06-12 8 3
Я показал, что дата начала, серийный номер и autoID не связаны друг с другом. Я показал ожидание того, что рабочая сила снижается с увеличением длины пробега (но это «факт» только благодаря полученной мудрости, а не анализу данных). Я показал то, что я представляю как основу решения, - это RunID, который отражает последовательные сборки одного элемента. Я знаю, что если бы я мог получить этот runID, я мог бы группировать по прогонам, чтобы получить счетчики, средние значения, итоги, максимум, мин и т. Д. Кроме того, я мог бы сделать что-то вроде часов /, чтобы получить процентное изменение с начала прогона. В этот момент я мог бы построить график тенденций, связанных с разными длинами прогонов, либо глобально для всех элементов, либо для каждого элемента в отдельности. (По крайней мере, я думаю, что смогу сделать все это. Возможно, мне придется немного поработать, но я думаю, что смогу это сделать.)
Редактировать 2: Эта проблема может выглядеть следующим образом: как получить «начальный» член (самая ранняя дата начала) каждого прогона, когда у меня еще нет runID? (RunID, показанный в примере таблицы, не существует, и я изначально предполагал, что возможность рассчитать runID была потенциально жизнеспособным решением.)
AutoID Item
1 Legend
4 Apex
6 Legend
Я предполагаю, что, узнав, как найти первого члена каждого прогона, я смог бы использовать то, что выучил, чтобы найти последнего члена каждого прогона, а затем использовать эти два результата, чтобы получить все остальные. участники каждого забега.
Редактировать 3: моя версия запроса, которая использует AutoID первого элемента в прогоне в качестве RunID для всех единиц в прогоне. Это было построено полностью из образцов и руководства, предоставленного Саймоном, у которого есть принятый ответ. Используя это в качестве основы для группировки по прогонам, я могу создавать различные статистические данные прогонов.
ВЫБЕРИТЕ first_product_of_run.AutoID AS runID, run_sibling.AutoID AS itemID, run_sibling.Item, run_sibling.Serial, run_sibling.StartDate, run_sibling.Hours
FROM (ВЫБЕРИТЕ first_of_run.AutoID, first_of_run.Item, first_of_run.Serial, first_of_run.StartDate, first_of_run.Hours
ИЗ dbo.production КАК first_of_run ВЛЕВО НАРУЖНОЕ
dbo.production AS ранее_in_run ON first_of_run.AutoID - 1 = ранее_ин_run.AutoID Иfirst_of_run.Item = earlier_in_run.Item ГДЕ (earlier_in_run.AutoID IS NULL)) КАК first_product_of_run LEFT OUTER JOIN dbo.production AS run_sibling ПО first_product_of_run.Item = run_sibling.Item И first_product_of_run.AutoID run_sibling.AutoID И first_product_of_run.StartDate product_between.Item И first_product_of_run.Дата начала