Tengo una tabla de SQL Server AccountAction
que está denormalizada. Es una versión aplanada de las tablas Account
y Action
, que espero que sea mucho más rápido para informar consultas sobre millones de filas. Uno puede tener muchas Account
Actions
, por lo que la tabla es similar a:SQL para obtener X cantidad de cuentas de DB, que podría ser un número variable de filas
Account Action
account1 action1
account1 action2
account1 action10
account2 action5
Sin embargo estoy teniendo algunos problemas para conseguir la información de nuevo para un subconjunto restringido en un procedimiento almacenado simple.
select Account, Action
from AccountAction
where ???
Lo que estoy buscando es obtener las primeras X cuentas, con todas sus acciones. Entonces esta será una cantidad dinámica de filas. Entonces, usando la tabla de ejemplo anterior si pasé en 1, obtendría 3 filas (es decir, me daría todas las filas para la primera cuenta).
(no me importa que el nombre de la cuenta estará en cada fila - que pivota en otro lugar)
¿Es necesario utilizar un ROWNUM o similar a restringir las filas? Estoy seguro de que esto debe ser un problema más simple de lo que he encontrado hasta ahora.
EDITAR
Las respuestas usando TOP no va a funcionar, en el ejemplo que estaría queriendo 3 filas devueltas si dijera 'dame uno (el primero) cuenta'. ¿Pero cómo sé que habrá 3? Su dinámica Además, pueden no ser secuenciales, ¿y si action99 de la cuenta1 estuviera en la posición 55 millones en los resultados?
Esto suena bien, aunque ¿qué pasa con el rendimiento en p. Ej. ¿100 m de hileras? Va a tener que hacer el rango en cada fila primero, ¿verdad? – finoutlook
@finoutlook - Depende. Todo lo que * realmente * se necesita es tener los datos en orden 'Cuenta'. Una vez ordenado, el optimizador puede buscar la instancia 'Nth' de eso. Entonces, ¿ya tiene un índice con 'Cuenta' como primer campo? Si es así, los datos ya están ordenados y solo está procesando la cantidad mínima de registros. Si no, agregue uno;) – MatBailie
Genial, no había pensado ordenarlos por adelantado. Podría hacer eso como parte de la sincronización con la tabla desnormalizada. – finoutlook