2014-11-25 38 views
0

這個查詢工作是MySQL的SQL Server 2008中不使用LIMIT關鍵字

select 
    a.id, 
    a.name, 
    a.vehicle, 
    a.amt, 
    a.date 
    (select id 
    from tbl1 
    where date < a.date and vehicle = a.vehicle 
    LIMIT 0,1) as prv 
FROM 
    root_tbl a 
WHERE 
    amt <> 0 

我需要在SQL Server中此查詢。你能幫我嗎?

+0

'LIMIT'是一個非ANSI標準兼容的自定義擴展,在MySQL中使用 - 它不存在於SQL Server中。你需要使用'SELECT TOP(n).....' – 2014-11-25 05:53:34

回答

0

LIMIT不受SQL Server支持。

如果要獲取表格的前x行,則必須使用TOP,如SELECT TOP (10) * FROM tbl1中所示。

要做一個等價的偏移量,有一些技巧,例如子查詢將ROW_NUMBER()添加到結果集中,並在父查詢中過濾所需的偏移量。

SELECT * 
FROM (
    SELECT 
     id, 
     ROW_NUMBER() OVER (ORDER BY id) AS RowNum 
    FROM tbl1 
    ) T 
WHERE RowNum BETWEEN 51 AND 75 -- Similar to LIMIT 50,25 

對於您的特定查詢,您似乎只需要一個TOP來最有效率,因此以下應該適用於您的查詢。

select 
    a.id, 
    a.name, 
    a.vehicle, 
    a.amt, 
    a.date 
    (select top (1) id from tbl1 where date < a.date and vehicle=a.vehicle)as prv 
FROM tbl1 a