Pregunta

Trabajar con Oracle 11g aquí.

Estoy tratando de encontrar la manera de escribir una consulta específica contra una tabla de ejemplo a continuación:

 ID TYPE   PRIORITY    STATUS   DATE
 ----------------------------------------------------
 1  Q      A           NEW      01-OCT-2009
 1  Q      A           NEW      01-OCT-2009
 1  Q      A           NEW      01-OCT-2009
 1  Q      A           NEW      01-OCT-2009
 1  Q      A           NEW      01-OCT-2009
 1  Q      A           NEW      01-OCT-2009
 1  Q      A           NEW      01-OCT-2009
 1  Q      A           NEW      01-OCT-2009
 2  R      B           NEW      01-OCT-2009
 2  R      B           NEW      01-OCT-2009
 2  R      B           NEW      01-OCT-2009
 2  R      B           NEW      01-OCT-2009
 3  R      A           NEW      01-OCT-2009
 3  Q      A           NEW      01-OCT-2009
 3  Q      A           NEW      01-OCT-2009

Aquí es el pseudo-PL / SQL de lo que quiero hacer la consulta:

 SELECT ID, TYPE
 FROM DATA_TABLE
 WHERE ROWNUM = 1 AND STATUS = 'NEW'
 GROUP BY ID, TYPE
 ORDER BY PRIORITY, DATE

Quiero agarrar el siguiente grupo de ID, tipo que tiene un estatus NUEVO ordenada por prioridad y la fecha.

En el caso anterior la declaración debe devolver o bien 1 Q o Q 3, pero no ambos, ya que tienen la misma prioridad y la fecha. Si 3 Q se establece en STATUS = 'HECHO' continuación, la consulta debería devolver 1 Q.

Para el segundo paso que voy a unirse a estos datos de nuevo a la mesa para agarrar las filas del conjunto Quiero procesar (por ejemplo: 1 Q). Esto no tiene que ser un proceso de dos pasos; si puedo agarrar el conjunto de filas para procesar sin la unión que sería lo ideal.

Espero Sólo estoy perdiendo algo muy simple, pero estoy abierto a la utilización de funciones analíticas para la partición si es necesario.

¿Fue útil?

Solución

SELECT * FROM (SELECT ID, TYPE FROM DATA_TABLE WHERE STATUS = 'NEW' ORDER BY PRIORITY, DATE) WHERE ROWNUM = 1

Esto se debe trabajar. Usted no desea agrupar por ID y el tipo porque no está realmente tratando de realizar cualquier tipo de agregación en las filas que coinciden con un determinado ID y el tipo. Si sólo se preocupaba por una columna (decir FECHA) se podría decir

SELECT ID, TYPE FROM DATA_TABLE WHERE DATE = (SELECT MIN(DATE) FROM DATA_TABLE) AND ROWNUM = 1

y evitar la clasificación de toda la tabla. Pero no veo cómo hacer que el trabajo aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top