400行のテーブルがあります。最後の行を除く最後の 6 行を選択したい。
次のコードでは、最後の 6 行を取得していますが、最後 (400 番目) の行は表示したくありません
SELECT *
FROM ImagesInfo
WHERE Image_Id IN
( SELECT TOP 6 Image_Id
FROM ImagesInfo
ORDER BY Image_Id DESC )
400行のテーブルがあります。最後の行を除く最後の 6 行を選択したい。
次のコードでは、最後の 6 行を取得していますが、最後 (400 番目) の行は表示したくありません
SELECT *
FROM ImagesInfo
WHERE Image_Id IN
( SELECT TOP 6 Image_Id
FROM ImagesInfo
ORDER BY Image_Id DESC )
SELECT top 6 *
FROM
( SELECT TOP 7 *
FROM ImagesInfo
ORDER BY Image_Id DESC
) t
ORDER BY Image_Id
ROW_NUMBER()
構文を使用する
SELECT *
from
(
SELECT *, ROW_NUMBER() over (ORDER By Image_ID) rn
FROM yourtable
) v
WHERE rn between x and y
オフセットを見てください
SELECT First Name + ' ' + Last Name FROM Employees ORDER BY First Name OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;
【Microsoft SQL Server ウェブサイト】
どうですか:
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)
また
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 )
これを試して:
結果セットから最大レコードを削除するだけです
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 )
また
SQL Server 2005 以降を使用している場合: CTEでROW_NUMBER()を使用できます
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 image_info
where image_id not in(select max(image_id) from image_info)
order by image_id desc