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
    

我的猜测是我需要用“HAVING”替换“WHERE”行,但我找不到“NOT HAVING”语法。

当前编写此查询的方式,如果位置的最大 id 列在 WHERE 子句中,它将不会返回 T1.position 的行。

如何让这个查询给我 T1.position 的最大 ID,同时忽略 WHERE 子句中列出的 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。为此,您的陈述对我来说是正确的。如果您的 NOT IN 子句中提到了它的所有id,则 Afaics 一个位置不会在结果集中列出。这是合理的,因为没有什么可以计算出 MAX 了。如果某些职位的 id 列在 NOT IN 中,而另一些则没有,您应该得到那些未列在 NOT IN 中的 MAX。

如果您的结果集与这些 expactations 不匹配,您应该调试插入 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 回答