Использование базы данных, в которой каждому ордеру присвоен Предмет, назначенный ему, и каждый элемент должен иметь действие «Пуск» до того, как действие «Действие» может произойти с ним, и как только это будет сделано, действие «Готово» выполненный.Неисправность при получении скрипта последним действием с использованием вложенных запросов
На одном и том же изделии может быть несколько стартов и отделок, но действие может выполняться только между действием «Старт» и «Готово».
Я написал сценарий, чтобы попытаться найти любые случаи работы, выполняемые после финиша, но без запуска, но он не возвращает значения, которые я хочу.
SELECT
O.ORDER_NUMBER
--,*
FROM
[CUSTOMER] [C]
JOIN
[SITE] [S] ON C.CUSTOMER_ID=S.CUSTOMER_ID
JOIN
[ORDER] [O] ON S.SITE_ID=O.SITE_ID
JOIN
[ITEM] [I] ON O.ORDER_ID=I.ORDER_ID
JOIN
(SELECT
MAX(ACTION_ID) AS [START_ID]
,A2.ITEM_ID
FROM
[ACTION] [A2]
JOIN
[ALLOWED_ACTION] [AA2] ON A2.ALLOWED_ACTION_ID = AA2.ALLOWED_ACTION_ID
WHERE
AA2.DESCRIPTION='START'
GROUP BY
A2.ITEM_ID) AS [D] ON I.ITEM_ID=D.ITEM_ID
JOIN
(SELECT
MAX(ACTION_ID) AS [FINISH_ID]
,A3.ITEM_ID
FROM
[ACTION] [A3]
JOIN
[ALLOWED_ACTION] [AA3] ON A3.ALLOWED_ACTION_ID = AA3.ALLOWED_ACTION_ID
WHERE
AA3.DESCRIPTION='FINISH'
GROUP BY
A3.ITEM_ID) AS [F] ON I.ITEM_ID=F.ITEM_ID
JOIN
(SELECT
MAX(ACTION_ID) AS [LAST_ID]
,A4.ITEM_ID
FROM
[ACTION] [A4]
GROUP BY
A4.ITEM_ID) AS [L] ON I.ITEM_ID=L.ITEM_ID
WHERE
(L.LAST_ID>F.FINISH_ID)
AND
(F.FINISH_ID>D.START_ID)
Я принял взглянуть на How to get the 2nd highest from a table where it need to be added first in sql server in a single query? и другие подобные ему, чтобы попытаться понять это, но я не понимаю, что я делаю неправильно.
Типичный результат даст мне номер заказа, и когда я проверю действия, последним действием всегда будет финиш или он сначала начнет.
Любая помощь для меня значила бы.
Если это 'величайшую-н-в-group' проблемы, вы можете попробовать [поиск по сайту] (http://stackoverflow.com/questions/tagged/greatest-n-per-group+ sql-server "[наибольший-n-per-group] + [sql-server]") для готовых решений. –
Спасибо @ AndriyM, глядя через них, помогло! – Shaneis