En iyi yanıtlayıcılar
SQL row atlamak

Soru
-
Asp.net query builder da SQL Server databaseimde şunu yapmak istiyorum
En sondan 6 satırı alsın fakat ilk 1. satırı almasın.
SELECT TOP (6) CategoryId, Date, Headline, Id, ImageName, MainPage, Text, Text2
FROM Articles
WHERE (CategoryId = 2)
ORDER BY Id DESCBununda son 6 yı alıyorum fakat baştan 1 tanesini nasıl almayacağım? Teşekkürler.
Örnek
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i
10 j
a
Yanıtlar
-
Verdigin ornekle, sordugun soru biribirini tutmadigindan ne istedigin tam anlasilmiyor.
Sordugun soruya uyan:
SELECT TOP 6 CategoryId, Date, Headline, Id, ImageName, MainPage, Text, Text2 FROM Articles WHERE CategoryId = 2 AND Id NOT IN ( SELECT TOP 1 Id FROM Articles WHERE CategoryId = 2 ) ORDER BY Id DESC;
Verdigin ornege uyan (SQL Server 2012 ve sonrasi icin):
SELECT CategoryId, Date, Headline, Id, ImageName, MainPage, Text, Text2 FROM Articles WHERE CategoryId = 2 ORDER BY Id OFFSET 1 ROWS FETCH NEXT 6 ROWS ONLY;
- Yanıt Olarak İşaretleyen Anıl Ergin 15 Aralık 2015 Salı 11:14
Tüm Yanıtlar
-
-
-
Verdigin ornekle, sordugun soru biribirini tutmadigindan ne istedigin tam anlasilmiyor.
Sordugun soruya uyan:
SELECT TOP 6 CategoryId, Date, Headline, Id, ImageName, MainPage, Text, Text2 FROM Articles WHERE CategoryId = 2 AND Id NOT IN ( SELECT TOP 1 Id FROM Articles WHERE CategoryId = 2 ) ORDER BY Id DESC;
Verdigin ornege uyan (SQL Server 2012 ve sonrasi icin):
SELECT CategoryId, Date, Headline, Id, ImageName, MainPage, Text, Text2 FROM Articles WHERE CategoryId = 2 ORDER BY Id OFFSET 1 ROWS FETCH NEXT 6 ROWS ONLY;
- Yanıt Olarak İşaretleyen Anıl Ergin 15 Aralık 2015 Salı 11:14
-
Çetin Bey Merhaba,
İlk gönderdiğiniz sorguya ufak bir ekleme yaparak sorunu çözdüm.
Aslında ikincisi yani OFFSET FETCH kullanmak daha mantıklı. SQL Server 2014 kullanmama rağmen OFFSET kullanamıyorum nedense. Yazdığınızı sorguladım kendim de değiştirdim bazı şeyleri denedim. Ama Offseti çalıştıramadım.
Incorrect syntax near 'OFFSET'.
Invalid usage of the option NEXT in the FETCH statement.İlginize teşekkür ederim.
ELECT TOP 6 CategoryId, Date, Headline, Id, ImageName, MainPage, Text, Text2 FROM Articles WHERE CategoryId = 2 AND Id NOT IN ( SELECT TOP 1 Id FROM Articles WHERE CategoryId = 2 ORDER BY Id DESC ) ORDER BY Id DESC;
a
-
Yani hem soruda hem de ornekte anlattigindan farkli bir sey istiyormussun :)
Onun icin diyorum, soruyu net sormak, sorarken kod olarak veri verip sonucta ne istedigini acik bir sekilde orneklemek onemli diye. Neyse sonucta cozulmus.
Not: Bu arada benim verdigim OFFSET ile, Northwind database Orders tablosu kullanarak senin istedigini modellersek:
SELECT * FROM Orders WHERE [ShippedDate] IS NOT NULL ORDER BY OrderID DESC OFFSET 1 ROWS FETCH NEXT 6 ROWS ONLY;
Gayet guzel, sondaki 11069'u atliyor ve 11067,11066,11064,11063,11060 ve 11057 OrderId'li kayitlari getiriyor.
- Düzenleyen CetinBasoz 15 Aralık 2015 Salı 10:04