我有一個包含400行的表。我想選擇除最後一行之外的最後6行。查詢獲取排除最後一行的最後n行
用下面的代碼我得到最後的6行,但我不希望最後(第400),排在那裏
SELECT *
FROM ImagesInfo
WHERE Image_Id IN
( SELECT TOP 6 Image_Id
FROM ImagesInfo
ORDER BY Image_Id DESC)
我有一個包含400行的表。我想選擇除最後一行之外的最後6行。查詢獲取排除最後一行的最後n行
用下面的代碼我得到最後的6行,但我不希望最後(第400),排在那裏
SELECT *
FROM ImagesInfo
WHERE Image_Id IN
( SELECT TOP 6 Image_Id
FROM ImagesInfo
ORDER BY Image_Id DESC)
什麼:
SELECT * FROM ImagesInfo
WHERE Image_Id IN (SELECT TOP 6 Image_Id FROM ImagesInfo ORDER BY Image_Id DESC) AND
Image_Id <> (SELECT TOP 1 Image_Id FROM ImagesInfo ORDER BY Image_Id DESC)
OR
SELECT * FROM ImagesInfo
WHERE Image_Id IN (SELECT TOP 6 Image_Id FROM ImagesInfo ORDER BY Image_Id DESC) AND
Image_Id <> (SELECT MAX(Image_Id) FROM ImagesInfo)
如果我的理解正確(我不確定),那麼你應該能夠做到:
SELECT *
FROM ImagesInfo
WHERE Image_Id IN
( SELECT TOP 7 Image_Id
FROM ImagesInfo
ORDER BY Image_Id DESC)
and Image_Id not IN
( SELECT TOP 1 Image_ID
FROM ImagesInfo
ORDER BY Image_Id DESC)
使用ROW_NUMBER()
語法
SELECT *
from
(
SELECT *, ROW_NUMBER() over (ORDER By Image_ID) rn
FROM yourtable
) v
WHERE rn between x and y
試試這個:
你只需要消除的結果,最大記錄集
SELECT *
FROM ImagesInfo
WHERE Image_Id IN
( SELECT TOP 6 Image_Id
FROM ImagesInfo
where Image_Id<> (select MAX(Image_Id) from ImagesInfo)
ORDER BY Image_Id DESC)
OR
如果使用SQL Server 2005或以上: 就可以使用,ROW_NUMBER()與CTE
with cte as(
SELECT *,
ROW_NUMBER() over (order by Image_Id desc) as row_num
FROM ImagesInfo)
select * from cte where row_num between 2 and 7
SELECT top 6 *
FROM
( SELECT TOP 7 *
FROM ImagesInfo
ORDER BY Image_Id DESC
) t
ORDER BY Image_Id
OP將包含max(記錄) – 2012-08-17 10:19:18
@Joe G Joseph:你確定嗎?我剛剛檢查過它,它工作正常... – 2012-08-17 10:29:15
哦..我的壞..我沒有注意到你的最後一個訂單的條款.. +1爲您的答案 – 2012-08-17 10:35:49
select top 6 * from image_info
where image_id not in(select max(image_id) from image_info)
order by image_id desc
看OFFSET
SELECT First Name + ' ' + Last Name FROM Employees ORDER BY First Name OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;
[ Microsoft SQL Server網站]
謝謝大家給出答案。幾乎所有的答案都是正確的。 – Shan 2012-08-17 10:40:24