2010-10-11 13 views
5

Tengo que escribir una consulta de la siguiente manera que tengan enlaces a una red deTengo que escribir una consulta SQL para mostrar los 25 mejores registros con una captura

select top 25 * from ErrTable Order by DateErrorad Desc 

Sin embargo, tengo que escribir esta consulta para volver solo 25 registros a la vez, pero cuando un usuario hace clic en siguiente, mostrará los próximos 25 registros más recientes de la base de datos.

¿Cómo puedo lograr esto?

+1

Qué SQL-servidor que se ejecuta? – Merrimack

+0

Ok, Will está usando MSSQL. –

+0

Posible duplicado: http://stackoverflow.com/questions/603724/how-to-implement-limit-with-microsoft-sql-server –

Respuesta

0

Puede usar el comando LIMIT para seleccionar entradas en un rango determinado. Sin embargo, no estoy seguro de si todos los motores apoyan, por lo que una solución más general (aunque menos eficiente, tengo por cierto), es ...

SELECT TOP 25 * 
FROM YOURTABLE 
WHERE IDCOL NOT IN (SELECT TOP 25 * FROM YOURTABLE) 

Lo siento por la definición suelta, Me voy y puede Responda con más detalle.

+0

Ok, así que tengo una fecha: – Will

+0

elija la parte superior 25 * de ErrTable Ordenar por DateErrorad Desc where dateerrored <2010-10-11 15:54:00 – Will

+0

Y su edición todavía no ayuda .... –

0

En MySQL puede hacerlo con LIMIT, en MSSQL no sé si eso funciona.

SELECT * FROM table LIMIT 10 

o

SELECT * FROM table LIMIT 0, 10 

Esto mostrará los primeros 10 resultados de la base de datos.

SELECT * FROM table LIMIT 5, 5 

Esto mostrará los registros de 6 a 10

2

Ok, ya que no sé qué base de datos del servidor/motor, pero básicamente se necesita un rango (en su caso 25) y un número de página (por ejemplo, 0 es la primera página, 1 para la próxima página de 25 registros, etc.).

En MySQL, usted puede hacer esto (usando el comando LIMIT) ....

SELECT * FROM TABLE LIMIT START, RANGE; 

Wher TABLE es su nombre de la tabla, START es su índice de inicio/intervalo de, por ejemplo, si tiene registro 0 - 24, puede configurar start = 25, para leer los siguientes 25 (que es donde entra en juego RANGE).

Esto solo está disponible en MySQL, en DB2 es diferente. Descubra quién es el servidor/motor de su base de datos que maneja la paginación.

En DB2:

SELECT * FROM TABLE FETCH FIRST N ROW ONLY; 

Dónde N es un valor numérico.

Editar Para MSSQL, se puede ver otro post relacionados:

He aquí un artículo que muestra Paging in ASP.NET.

+0

Oh ok déjame intentarlo, taht – Will

+0

Límite no está incorporado en MSSQL – Will

+0

Si lees mi publicación, dijo que funciona en 'MySQL'. –

0

Suponiendo que está utilizando SQL Server (basado en el ASP.NET tag):

declare @offset int 
set @offset = 25 

select * from (
    select *, row_number() over (order by DateErrorad desc) as i from ErrTable 
) a 
where i <= @offset + 25 and i > @offset 

Sin embargo, le recomiendo que use un ORM. Me encanta LINQ a SQL (que es un complemento perfecto para ASP.NET), y con eso se podría hacer esto como:

var rows = Errors.Skip(offset).Take(25); 
+0

¿Puede explicar esto? Select *, rank() over (ordenar por DateErrorad desc) como yo – Will

+0

Puede encontrar muchos tutoriales en la web para funciones de clasificación. Aquí hay uno: http://support.microsoft.com/default.aspx?scid=kb;EN-US;q186133 –

0

supongo que depende de su DBMS, la siguiente consulta LINQ2SQL- (tabla de DatabaseLogsAdventureWorks)

using (DataClasses1DataContext context = new DataClasses1DataContext()) 
{ 
    context.Log = Console.Out; 
    var qq3 = context.DatabaseLogs.Skip(20).Take(10).ToList(); 
} 

genera la siguiente consulta para MSSQL

SELECT [t1].[DatabaseLogID], [t1].[PostTime], [t1].[DatabaseUser], [t1].[Event], [t1].[Schema] AS [Schema], [t1].[Object], [t1].[TSQL], [t1].[XmlEvent] 
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY [t0].[DatabaseLogID], [t0].[PostTime], [t0].[DatabaseUser], [t0].[Event], [t0].[Schema], [t0].[Object], [t0].[TSQL]) AS [ROW_NUMBER], [t0].[DatabaseLogID], [t0].[PostTime], [t0].[DatabaseUser], [t0].[Event], [t0].[Schema], [t0].[Object], [t0].[TSQL], [t0].[XmlEvent] 
    FROM [dbo].[DatabaseLog] AS [t0] 
    ) AS [t1] 
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1 
ORDER BY [t1].[ROW_NUMBER] 
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [20] 
-- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [10] 
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1 
0

mediante la creación de un procedimiento almacenado y que pasa a su rango

create procedure dbo.SelectWindow 
@start int, @end int 
as 
begin 

select * 
from 
(
select 
*, 
row_number() (order by ID) as Row 
from dbo.table 
) a 
where Row between @start and @end 


end 
go 
+0

'row_number' no es un nombre de función reconocido. – Will

+0

@Will, ¿está usando sql server 2000? – DForck42

Cuestiones relacionadas