2010-03-06 20 views
19

si tengo una tabla con columnas de identificación, nombre, puntuación, fechaconsulta SQL para obtener mayor brevedad

y quería ejecutar una consulta SQL para obtener el registro donde id = 2 con la fecha más temprana en los datos conjunto.

¿Puedes hacer esto dentro de la consulta o necesitas hacer un ciclo después del hecho?


EDITAR: Para ser explícito, quiero obtener todos los campos de ese registro. .

Respuesta

28

Si lo que desea es la fecha:

SELECT MIN(date) as EarliestDate 
FROM YourTable 
WHERE id = 2 

Si quieres toda la información: bucles

SELECT TOP 1 id, name, score, date 
FROM YourTable 
WHERE id = 2 
ORDER BY Date 

Prevenir cuando pueda. Los bucles a menudo conducen a cursores, y los cursores casi nunca son necesarios y muy a menudo realmente ineficientes.

+0

si también quiero obtener el nombre para este registro – leora

5
SELECT TOP 1 ID, Name, Score, [Date] 
FROM myTable 
WHERE ID = 2 
Order BY [Date] 
2

Trate

select * from dataset 
where id = 2 
order by date limit 1 

ha pasado un tiempo desde que hice SQL, por lo que este podría necesitar algunos ajustes.

1

El uso de "límite" y "arriba" no funcionará con todos los servidores SQL (por ejemplo, con Oracle). Usted puede tratar de una consulta más compleja en SQL puro:

select mt1.id, mt1."name", mt1.score, mt1."date" from mytable mt1 
where mt1.id=2 
and mt1."date"= (select min(mt2."date") from mytable mt2 where mt2.id=2) 
+0

Esto puede devolver más de una fila si hay filas con la misma fecha mínima. –

0

Durante el uso de TOP o una sub-consulta tanto en el trabajo, me gustaría romper el problema en pasos:

registro Buscar destino

SELECT MIN(date) AS date, id 
FROM myTable 
WHERE id = 2 
GROUP BY id 

de Ingreso para obtener otros campos

SELECT mt.id, mt.name, mt.score, mt.date 
FROM myTable mt 
INNER JOIN 
( 
    SELECT MIN(date) AS date, id 
    FROM myTable 
    WHERE id = 2 
    GROUP BY id 
) x ON x.date = mt.date AND x.id = mt.id 

Si bien esta solución, utilizando tablas derivadas, es más largo, que es:

  • fácil poner a prueba
  • autodocumentado
  • extensible

Es fácil poner a prueba como parte de la la consulta se puede ejecutar de forma independiente.

Se auto documenta porque la consulta refleja directamente el requisito es decir, la tabla derivada muestra la fila donde id = 2 con la fecha más temprana.

Es extensible como si se necesitara otra condición, esto se puede agregar fácilmente a la tabla derivada.

Cuestiones relacionadas