2012-01-29 82 views
5

enter image description hereSQL Server时,选择一个记录的记录每一个“X”量

嗨,

我有“表1”如上图所示,有一些关于它的记录和列名ID,姓名和[入境日期]。列id主键,我使用SQL Server 2005的

我想写一个返回信息每5条记录,例如查询我的查询将返回:

enter image description here

正如你所看到的在最终结果中只有记录每5条记录被选中,我该如何做到这一点?

谢谢

+3

看看这个...... http://stackoverflow.com/questions/16568/how-to-select-the-nth-row-in-a-sql-database-table与此http ://msdn.microsoft.com/en-us/library/ms190279.aspx。诀窍是使用SQL的ROW_NUMBER()OVER和模数命令。 – 2012-01-29 17:12:50

+0

你不能用SQL查询做到这一点,除非SQL Server提供了一种方法来触发过程秒每x量,否则,你将需要使用一些语言,你也必须保持跟踪你要取数据。 – Shaheer 2012-01-29 17:14:30

+7

1,5,10,15,即不是每个5.第一个区别是4,而所有的后续是5.你的意思是1,6,11,16,....? – 2012-01-29 17:19:47

回答

16
SELECT id, name, entryDate 
    FROM (SELECT ROW_NUMBER() OVER(ORDER BY id) rowNumber, Id, name, entryDate 
      FROM MyTable) 
    WHERE rowNumber = 1 
    OR rowNumber % 5 = 0 
+0

+1使用实际行号。 – Aaron 2012-01-29 17:35:16

+0

嘿!你甚至迎合什么肯定是在老年退休金计划部分loigc一个错误,好:) – MatBailie 2012-01-29 17:37:25

+0

+1这是做正确的方式。 – 2012-01-29 17:47:05

0
select * from mytable 
where id = 1 or id % 5 = 0 
+0

这是行不通的。没有删除。没有失败的插入。等 – 2012-01-29 17:25:10

+0

ID之间的差距假设所有的记录是连续 – MatBailie 2012-01-29 17:36:29

0

假设ID是连续的,独一无二的(他们似乎),只是每一条记录索引+ = 5。为此一些伪代码:

$index = 0; 
while ($index <= $totalRecords) { 
    $result = "select * from records where id='$index'"; 
    /*process results*/ 
    $index += 5; /*increment index for next query*/ 
} 

注意,对于记录ID = 1,将是一个特殊的情况,因为你的ID从1开始,而不是0

希望这给你一个想法。

+0

谢谢你的伪代码。 – Fayde 2012-01-29 18:20:33

相关问题