如何只选择SQL Server中的第三行或第四行

时间:2014-09-05 16:11:56

标签: sql sql-server

我在查找我正在编写的查询中仅选择第三行或第四行的方法时遇到了一些麻烦,我们将非常感谢任何帮助。

这是我提出的代码示例,但这只选择了第一行。

Left Outer Join (select ap_attachments.ap_table_key, ap_description, ap_creation_date, ap_creation_time, ap_file_name, ap_attach_id
                     from ap_attachments
                          inner join (select Min(ap_attachment_id) ap_attach_id, ap_table_key
                                      from ap_attachments
                                      where ap_file_name like '%jpg%'
                                      group by ap_table_key) C 
                             On ap_attachments.ap_attachment_id = C.ap_attach_id) apImgThree_attach 
        On apImgTwo_attach.ap_table_key = order_link.to_order_id

2 个答案:

答案 0 :(得分:0)

您可以使用ROW_NUMBER()功能执行此操作:

select ap_attachment_id, ap_table_key,ROW_NUMBER() OVER(PARTITION BY ap_table_key ORDER BY ap_attachment_id) AS RN
from ap_attachments
where ap_file_name like '%jpg%'

然后,您可以使用RN值指定要返回的行。这可能需要根据您的源数据进行一些调整,DENSE_RANK()函数可能更合适。

ROW_NUMBER()函数为每一行分配一个数字。 PARTITION BY是可选的,但用于为该组中的每个值开始编号,即:如果您PARTITION BY Some_Date,那么对于每个唯一日期值,编号将从1开始。ORDER BY当然用于定义计数应该如何进行,并且在ROW_NUMBER()函数中是必需的。

答案 1 :(得分:0)

查看关于超前和滞后的文档。您还可以使用PARTITION子句在特定日期内创建窗口,例如;

declare @table table(
[flower] [sysname]);
insert into @table
        ([flower])
values      (N'rose'),
        (N'tulip'),
        (N'chamomile'),
        (N'lily');
select [flower] from   @table order  by [flower];
select [flower]
   , lag ([flower]
          , 1
          , 0)
       over (
         order by [flower] desc) as [previous_flower]
   , lead ([flower]
           , 1
           , 0)
       over (
         order by [flower] desc) as [next_flower]
from   @table;