ultimo ultima registro reciente por ordenar obtener mas hora fecha extraer desc consulta antiguo sql sql-server

sql - ultima - Ordenar por fecha descendente-mes, día y año



order by en sql (6)

¿ EventDate es el tipo del campo EventDate , ya que el orden no es correcto? Supongo que no lo tiene configurado en algún tipo de fecha / hora, sino en una cadena. Y luego la forma americana de escribir fechas es desagradable de ordenar

Esto parece estúpido pero, simplemente necesito una lista de fechas para ordenar con la fecha más reciente en la parte superior. El uso de order by DESC no parece estar funcionando como yo quiero.

SELECT * FROM vw_view ORDER BY EventDate DESC

Me da la fecha ordenada por mes y día, pero no toma en cuenta el año. por ejemplo:

12/31/2009 12/31/2008 12/30/2009 12/29/2009

Necesita ser más como

12/31/2009 12/30/2009 12/29/2009 12/28/2009

y así.


Si reestructuró su formato de fecha en YYYY / MM / DD, entonces puede usar este sencillo orden de cadena para lograr el formateo que necesita.

Alternativamente, utilizando el SUBSTR(store_name,start,length) , debería poder reestructurar el término de clasificación en el formato anterior

tal vez usando lo siguiente

SELECT * FROM vw_view ORDER BY SUBSTR(EventDate,6,4) + SUBSTR(EventDate, 0, 5) DESC


Supongo que EventDate es un char o varchar y no una fecha, de lo contrario su orden por cláusula estaría bien.

Puede usar CONVERTIR para cambiar los valores a una fecha y ordenar por esa

SELECT * FROM vw_view ORDER BY CONVERT(DateTime, EventDate,101) DESC

El problema con eso es que, como señala Sparky en los comentarios, si EventDate tiene un valor que no se puede convertir en una fecha, la consulta no se ejecutará.

Esto significa que debe excluir las filas incorrectas o dejar que las filas incorrectas vayan al final de los resultados

Para excluir las filas WHERE IsDate(EventDate) = 1 simplemente añada WHERE IsDate(EventDate) = 1

Para dejar que las fechas incorrectas vayan al final, debes usar CASE

p.ej

ORDER BY CASE WHEN IsDate(EventDate) = 1 THEN CONVERT(DateTime, EventDate,101) ELSE null END DESC


Suponiendo que tiene la capacidad de realizar cambios de esquema, la única respuesta aceptable a esta pregunta IMO es cambiar el tipo de datos base a algo más apropiado (por ejemplo, date SQL Server 2008).

El almacenamiento de fechas como cadenas mm/dd/yyyy es ineficiente en cuanto al espacio, es difícil de validar correctamente y hace que los cálculos de fecha y clasificación sean innecesariamente dolorosos.


Tiene el campo en una cadena, por lo que deberá convertirlo a datetime

order by CONVERT(datetime, EventDate ) desc


Tratar:

ORDER BY MONTH(Date),DAY(DATE)

EDITAR (Por usuario anónimo.)

Creo que esta publicación está terminada, sin embargo, este usuario anterior ha encontrado algo que resolvió mi problema por encima de todos los demás.

Si alguien está teniendo problemas con las otras soluciones, intente con un mod menor del código anterior.

ORDER BY YEAR(Date) DESC, MONTH(Date) DESC, DAY(DATE) DESC

Este fue mi enfoque final y funcionó perfectamente en un JET DB.

PD. Espero que nadie esté usando Date como su nombre de campo ;-)