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);

2番目に試した


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 に答える