Sql 脚本使用嵌套查询获取最后一个操作时遇到问题

Sql 脚本使用嵌套查询获取最后一个操作时遇到问题,sql,sql-server,Sql,Sql Server,使用一个数据库,其中每个订单都有一个分配给它的项目,每个项目都必须有一个开始操作,然后才能对其执行工作操作,一旦完成,就会执行完成操作 同一项目可以有多个开始和结束,但工作只能在开始和结束动作之间进行 我写了一个脚本,试图找到任何在完成后但没有开始的情况下执行的工作,但它不会返回我想要的值 SELECT O.ORDER_NUMBER --,* FROM [CUSTOMER] [C] JOIN [SITE] [S] ON C.CUSTOMER_ID=S.CUSTOMER_ID JOIN [ORDE

使用一个数据库,其中每个订单都有一个分配给它的项目,每个项目都必须有一个开始操作,然后才能对其执行工作操作,一旦完成,就会执行完成操作

同一项目可以有多个开始和结束,但工作只能在开始和结束动作之间进行

我写了一个脚本,试图找到任何在完成后但没有开始的情况下执行的工作,但它不会返回我想要的值

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)
我已经看了一眼,其他人也喜欢看,试图找出答案,但我不知道我做错了什么

一个典型的结果会给我一个订单号,当我检查动作时,最后一个动作总是完成或者先开始


任何帮助对我都很重要。

设法找到了解决这个问题的方法

我把所有的信息放到一个临时表中,然后在临时表上做最后的条件语句,它调用了我想要的信息

不确定原始的条件语句是否只对脚本的一部分起作用,但必须有比我更聪明的人才能弄清楚:)

不管怎样,这是我的最后一个剧本

SELECT
O.ORDER_NUMBER
,LAST_ID
,FINISH_ID
,LAST_ID
INTO #TEMP1
--,*
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

SELECT ORDER_NUMBER FROM #TEMP1
WHERE LAST_ID>FINISH_ID
AND 
FINISH_ID>START_ID

如果这是一个
最大的每组n个问题
,您可以尝试现成的解决方案。