2012-01-29 27 views
5

enter image description hereSQL Server, chọn một kỷ lục mỗi số tiền 'x' hồ sơ

Hi,

Tôi có “Table1” như trình bày ở trên với một số hồ sơ vào nó và tên cột là Id, Name và [ Ngày nhập]. Id cột là khóa chính, Tôi đang sử dụng SQL Server 2005.

Tôi muốn viết một truy vấn mà trả về thông tin mỗi 5 hồ sơ, ví dụ truy vấn của tôi sẽ trở lại:

enter image description here

Như bạn có thể nhìn thấy trong kết quả cuối cùng chỉ có bản ghi mỗi 5 hồ sơ được chọn, làm thế nào tôi có thể thực hiện được điều này?

Cảm ơn bạn

+3

Hãy xem điều này ... http://stackoverflow.com/questions/16568/how-to-select-the-nth-row-in-a-sql-database-table và http này : //msdn.microsoft.com/en-us/library/ms190279.aspx. Bí quyết là sử dụng hàm ROW_NUMBER() OVER của SQL và lệnh modulo. –

+0

bạn không thể làm điều này với truy vấn sql Máy chủ sql không giới hạn cung cấp một cách để kích hoạt một thủ tục mỗi x số giây, nếu không bạn sẽ cần phải sử dụng một số ngôn ngữ, bạn cũng sẽ phải theo dõi các dữ liệu bạn đã tìm nạp. – Shaheer

+7

1, 5, 10, 15. Đó không phải là tất cả 5. Sự khác biệt đầu tiên là 4, trong khi tất cả tiếp theo là 5. Bạn có nghĩa là 1, 6, 11, 16, ....? –

Trả lời

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 để sử dụng số hàng thực tế. – Aaron

+0

Heh! Bạn thậm chí còn phục vụ cho những gì chắc chắn là một sai lầm trong loigc trên phần OPs, tốt đẹp :) – MatBailie

+0

+1 đây là đúng cách để làm điều đó. –

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

Điều này sẽ không hoạt động nếu có khoảng trống giữa các id do xóa –

+0

Giả sử tất cả các bản ghi là tuần tự. Không xóa. Không chèn không thành công. Vv – MatBailie

0

Giả sử ID là tuần tự và độc đáo (mà họ dường như), chỉ cần chỉ số + = 5 cho mỗi bản ghi. Một số mã giả cho việc này:

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

Lưu ý rằng đối với kỷ lục ID = 1, sẽ là một trường hợp đặc biệt kể từ ID của bạn bắt đầu từ 1, và không phải 0.

Hy vọng điều này mang đến cho bạn một ý tưởng.

+0

Cảm ơn bạn đã viết mã giả. – Fayde

Các vấn đề liên quan