7
  1. 将来削除される行のID番号を取得するクエリがいくつかあります。
  2. 行番号は文字列に入れられ、以下のクエリ(「2」が表示されている場所)に配置されます。
  3. 結果に行を無視させたい(すでに削除されているかのように)。

    SELECT MAX(T1.id) AS MAXid
    FROM transactions AS T1 
    WHERE id NOT IN ( 2 ) 
    GROUP BY T1.position 
    ORDER BY T1.position
    

「WHERE」の行を「HAVING」に置き換える必要があると思いますが、「NOTHAVING」の構文が見つかりません。

このクエリの現在の記述方法では、位置の最大IDがWHERE句にリストされている場合、T1.positionの行は返されません。

WHERE句にリストされているIDを持つ行を見落としながら、このクエリを取得してT1.positionの最大IDを取得するにはどうすればよいですか?

4

4 に答える 4

5

HAVING id NOT IN (2)動作するはずです。句[NOT] INに限定されません。WHERE

于 2011-03-09T10:18:24.243 に答える
3

HAVING は必要なものではありません。MAX でフィルタリングする場合にのみ役立ちます。たとえば、すべての MAXid を取得するのではなく、2 より大きいもののみを取得する場合は、HAVING MAXid > 2 を使用できます。

私が理解している限り、いくつかの行を無視して、残りの行の MAXid を計算したいと考えています。この目的のために、あなたの声明は私には正しいように見えます。すべてのIDがNOT IN句で言及されている場合、その位置は結果セットにリストされていません。MAX を計算できるものは何も残っていないため、これは合理的です。ポジションの ID の一部が NOT IN にリストされていて、他の ID がそうでない場合、NOT IN にリストされていない IDの MAX を取得する必要があります。

結果セットがこれらの期待値と一致しない場合は、NOT IN に挿入した文字列をデバッグする必要があります。誤って多くの ID が含まれている可能性があります。

于 2011-03-09T13:12:39.487 に答える
1

HAVING の有効な構文は次のとおりです。

SELECT MAX(T1.id) AS MAXid
FROM transactions AS T1 
GROUP BY T1.position 
HAVING MAX(T1.id) NOT IN ( 2 ) 
ORDER BY T1.position
于 2011-03-09T12:53:22.543 に答える
0

試してみましたか

SELECT MAX(t1.id) AS MAXid 
FROM transactions t1 
WHERE id  <> ANY (2) 
GROUP BY t1.position ORDER BY t1.position
于 2011-03-09T10:24:14.957 に答える