希望有人可以帮我清理我遇到问题的查询。在我从每组修订版中返回最新版本后,我试图将结果分成两半。
我可以将结果分成两半:
SELECT *
FROM
(
SELECT *, ntile(2) over(order by ID) as tile_nr
FROM dbTable
) x
WHERE x.tile_nr = 1
我可以通过以下方式从修订组中获得最新版本:
SELECT b1.*
FROM dbTable b1
INNER JOIN
(
SELECT ID, max(revision) as revision
FROM dbTable
GROUP BY ID
) as b2
ON b1.ID = b2.ID and
(
b1.revision = b2.revision or b2.revision is null
)
但是当我尝试将这些查询合并到这样的一个时:
SELECT *
FROM
(
SELECT *, ntile(2) over(order by ID) as tile_nr
FROM
(
SELECT b1.*
FROM dbTable b1
INNER JOIN
(
SELECT ID, max(revision) as revision
FROM dbTable
GROUP BY ID
) as b2
ON b1.ID = b2.ID and
(
b1.revision = b2.revision or b2.revision is null
)
)
) x
WHERE x.tile_nr = 1
我得到一个"不正确的snytax附近')'"'错误。它似乎不喜欢最后一个括号。
非常感谢任何帮助。
答案 0 :(得分:3)
这是缩进有助于调试的案例之一:
SELECT bt.*
FROM dbTable b1
INNER JOIN
(
SELECT ID, max(revision) as revision
FROM dbTable
GROUP BY ID
) as b2
ON b1.ID = b2.revision or b2.revision is null
具体来说,最内层的SELECT包含一个在该范围内没有意义的ON子句。您需要生成子查询结果集,为其命名别名,然后在加入条件中使用该别名:
SELECT *, ntile(2) over(order by ID) as tile_nr
FROM
(subquery) as subQ
后续编辑:
看起来像NTILE()SELECT解决问题的子查询别名:
read()