0

我试图根据内部连接条件设置一个标志,我需要在查询中使用 order by 子句,因为我的条件取决于具有特定字符串的最后一条记录,但它不能是最后一个表,我试过它说它不允许,我曾经尝试过的东西似乎对我不起作用。

第一次尝试:


UPDATE TESTINSTANCE SET NETWORKOUTAGE='1' 
WHERE TESTINSTANCEID IN (SELECT DISTINCT A.TESTINSTANCEID FROM AUDITLOG A 
INNER JOIN TESTINSTANCE TI ON TI.TESTINSTANCEID=A.TESTINSTANCEID AND TI.TIMETAKEN IS NULL 
AND TI.NETWORKOUTAGE!='1' 
AND TI.ISSENTTOEDUNXT IS NULL 
WHERE REPLACE(A.MESSAGE, ' ', '')=REPLACE('PING RESPONSE CAME FROM SERVER',' ','')  
AND DATEDIFF (MINUTE, A.REPORTEDTIME,  GETDATE())>=5 ORDER BY A.AUDITID DESC);

第二次尝试


UPDATE TI SET NETWORKOUTAGE='1' 
FROM  TESTINSTANCE TI INNER JOIN (SELECT DISTINCT A.TESTINSTANCEID FROM AUDITLOG A 
INNER JOIN TESTINSTANCE TI ON TI.TESTINSTANCEID=A.TESTINSTANCEID AND TI.TIMETAKEN IS NULL 
AND TI.NETWORKOUTAGE!='1' 
AND TI.ISSENTTOEDUNXT IS NULL 
WHERE REPLACE(A.MESSAGE, ' ', '')=REPLACE('PING RESPONSE CAME FROM SERVER',' ','')  
AND DATEDIFF (MINUTE, A.REPORTEDTIME,  GETDATE())>=5 ORDER BY A.AUDITID DESC) RES ON RES.TESTINSTANCEID=TI.TESTINSTANCEID;

但都给了我同样的错误,

The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified. 

我在这里想念什么?

4

1 回答 1

0

看到你想要做什么有点棘手,显然我们没有你的桌子。但我认为你想要这样的东西:

.... (SELECT A.TESTINSTANCEID,A.REPORTEDTIME,
     ROW_NUMBER() OVER (PARTITION BY A.TESTINSTANCEID ORDER BY A.AUDITID DESC) as RN
...

) RES ON RES.TESTINSTANCEID=TI.TESTINSTANCEID AND
     RES.RN = 1 AND
     DATEDIFF (MINUTE, RES.REPORTEDTIME,  GETDATE())>=5

并从子查询中删除日期比较。基本上,使子查询适当地编号行,以便在连接条件中,您可以只选择最新的行并使用该REPORTEDTIME值。

于 2013-01-22T07:50:53.087 回答