2012-01-29 11 views
5

enter image description hereSQL Server, seleccione un registro de cada 'x' de los registros

Hola,

tengo “Tabla 1” como se muestra arriba con algunos registros en él y los nombres de las columnas son de identificación, nombre y [ Fecha de entrada]. Columna Id es la clave principal, estoy usando SQL Server 2005.

Quiero escribir una consulta que devuelve información de cada 5 registros, por ejemplo, mi consulta devolverá:

enter image description here

Como se puede ver en el resultado final solo se seleccionó el registro cada 5 registros, ¿cómo puedo lograr esto?

Gracias

+3

Tome un vistazo a esto ... y esto http http://stackoverflow.com/questions/16568/how-to-select-the-nth-row-in-a-sql-database-table : //msdn.microsoft.com/en-us/library/ms190279.aspx. El truco es usar SQL ROW_NUMBER() OVER y el comando modulo. –

+0

no puede hacer esto con la consulta sql A MENOS que el servidor sql proporcione una manera de activar un procedimiento cada x cantidad de segundos, de lo contrario tendrá que usar algún idioma, también deberá realizar un seguimiento de los datos que haya obtenido. – Shaheer

+7

1, 5, 10, 15. Eso no es todos 5. La primera diferencia es 4, mientras que todas las siguientes son 5. ¿Quiere decir 1, 6, 11, 16, ....? –

Respuesta

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 para usar números de fila reales. – Aaron

+0

¡Heh! Incluso atiende lo que seguramente es un error en el loigc en la parte de OPs, nice :) – MatBailie

+0

+1 esta es la forma correcta de hacerlo. –

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

Esto no funcionará si hay espacios vacíos entre los identificadores debido a la eliminación –

+0

Supone que todos los registros son secuenciales. Sin eliminar Sin inserciones fallidas. Etc – MatBailie

0

Suponiendo que los identificadores son secuenciales y único (que parecen ser), justo index + = 5 para cada registro. Algunos pseudo código para esto:

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

Tenga en cuenta que para el registro de ID = 1, será un caso especial, ya que sus identificadores comienzan en 1 y no 0.

Hope esto le da una idea.

+0

Gracias por el pseudo código. – Fayde

Cuestiones relacionadas