Order by 和 Limit 语法

Order by and Limit syntax

下面的 SQL 语句会在 ORDER BY + LIMIT 语法上引发错误,因此,如果我删除 LIMIT,则可以正常工作。是否有语法错误或如何添加LIMIT?

SELECT * FROM dbo.T0

WHERE id < (
  SELECT ISNULL((SELECT a.id FROM dbo.T0 a, dbo.T0 b, dbo.T0 c 
  WHERE 
    (a.id = b.id + 1 AND a.var1 != b.var1) 
  AND 
    c.id < a.id
  AND 
    c.timeD = '2015/08/10 18:38:00'
  AND
    c.var1 = 2
  ORDER BY a.id LIMIT 1), (SELECT MAX(id) + 1 FROM dbo.T0)))
...

sql 服务器中没有 LIMIT

您可以使用 Select top 1 *,但在您的情况下我宁愿使用 row_number 和常见的 table 表达式 (cte)。

所以(也有一些连接语法)

with cte as (select 
             a.id, 
             row_number() over(order by a.Id) rn
             from dbo.T0 a 
             join dbo.T0 b on a.id = b.id + 1 and a.var1 != b.var1
             join dbo.T0 c on c.id < a.id
             where c.timeD = '2015/08/10 18:38:00'
             and c.var1 = 2),
     cte2 as (select id from cte where rn = 1
              union
              SELECT MAX(id) + 1 as id FROM dbo.T0)

select * from dbo.T0 where id < (select min(id) from cte2)
-- we take the min, here, 
--as we want the first part of the union of cte2 if it exists
-- and it will always be smaller then max(id) + 1