Tengo una tabla Oracle con las siguientes columnas.
Estructura de la mesa
En una consulta, necesito devolver todos los registros con CPER> = 40, lo cual es trivial. Sin embargo, aparte de CPER> = 40, necesito enumerar 5 registros aleatorios para cada CPID. He adjuntado una lista de muestra de registros. Sin embargo, en mi mesa tengo alrededor de 50,000 registros. Aprecio si puedes ayudar.
3 respuestas
Solución de Oracle:
with CTE as
(
select t1.*,
row_number() over(order by DBMS_RANDOM.VALUE) as rn -- random order assigned
from MyTable t1
where CPID <40
)
select *
from CTE
where rn <=5 -- pick 5 at random
union all
select t2.*, null
from my_table t2
where CPID >= 40
Servidor SQL:
with CTE as
(
select t1.*,
row_number() over(order by newid()) as rn -- random order assigned
from MyTable t1
where CPID <40
)
select *
from CTE
where rn <=5 -- pick 5 at random
union all
select t2.*, null
from my_table t2
where CPID >= 40
Suponiendo que desea cinco registros aleatorios adicionales , puede hacer lo siguiente:
select t.*
from (select t.*,
row_number() over (partition by cpid,
(case when cper >= 40 then 1 else 2 end)
order by dbms_random.value
) as seqnum
from t
) t
where seqnum <= 5 or cper >= 40;
row_number()
enumera las filas para cada cpid
en dos grupos, según el valor de cper
. El where
externo está tomando todos los valores de cper
en el rango que desea, así como cinco del otro grupo.
Qué tal algo como esto...
SELECT *
FROM (SELECT CID,
CVAL,
CPID,
CPER,
Row_number() OVER (partition BY CPID ORDER BY CPID ASC ) AS RN
FROM Table) tmp
WHERE CPER>=40 OR pids <= 5
Sin embargo, esto no es al azar.
Nuevas preguntas
sql
El lenguaje de consulta estructurado (SQL) es un lenguaje para consultar bases de datos. Las preguntas deben incluir ejemplos de código, estructura de tabla, datos de muestra y una etiqueta para la implementación de DBMS (por ejemplo, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, etc.) que se utiliza. Si su pregunta se relaciona únicamente con un DBMS específico (usa extensiones / características específicas), use la etiqueta de ese DBMS en su lugar. Las respuestas a las preguntas etiquetadas con SQL deben usar SQL estándar ISO / IEC.