Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

ordenar por meses

Estas en el tema de ordenar por meses en el foro de Mysql en Foros del Web. Tengo una columna donde tengo puesto un campo de mes y año ene08,feb08,marzo08,may08-jun08,sept08,ene09,mar09,jun09 ¿Hay alguna forma de ordenar las consultas por meses y por años? ...
  #1 (permalink)  
Antiguo 16/07/2009, 08:08
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 16 años
Puntos: 0
Pregunta ordenar por meses

Tengo una columna donde tengo puesto un campo de mes y año

ene08,feb08,marzo08,may08-jun08,sept08,ene09,mar09,jun09

¿Hay alguna forma de ordenar las consultas por meses y por años?
Y que quede de esta manera.

ene08
feb08
marzo08
may08-jun08
sept08
ene09
mar09
jun09

Gracias
  #2 (permalink)  
Antiguo 16/07/2009, 09:33
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: ordenar por meses

¿Qué tipo de datos tiene el campo?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 16/07/2009, 16:11
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 16 años
Puntos: 0
Respuesta: ordenar por meses

varchar
no esta en formato fecha.
ene08
feb08
oct09
sept08
etc

Gracias
  #4 (permalink)  
Antiguo 16/07/2009, 19:41
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: ordenar por meses

Siendo varchar es un poco complicado que puedas ordenar. ¿No será mejor que uses un campo DATE o de todos modos un INT y guardar las fechas en formato yymm?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 17/07/2009, 09:07
 
Fecha de Ingreso: junio-2008
Mensajes: 122
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: ordenar por meses

Si tenes la tabla ya estructurada de esa manera, por que no probas ordenarlos por id?

O sea, te los va a ordenar segun el orden en que lo ingresaste.
  #6 (permalink)  
Antiguo 18/07/2009, 04:02
Avatar de DBMark  
Fecha de Ingreso: mayo-2008
Ubicación: Oxford
Mensajes: 35
Antigüedad: 16 años
Puntos: 6
Respuesta: ordenar por meses

Seria mejor si el campo sea de formato "DATE" o "DATETIME" pero hay una solucion en Mysql

Código:
Order By field(campo_mes,'ene08','feb08','marzo08','may08-jun08','sept08','ene09','mar09','jun09')
;
El problema es que necesitas cambiarla cuando nuevos valores entren en la tabla.
  #7 (permalink)  
Antiguo 03/08/2009, 17:58
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 16 años
Puntos: 0
Respuesta: ordenar por meses

Gracias, tranquilo que nuevos datos no entran en la tabla, es que son movimientos de años atras, como si fuera un historico.

¿Puedo hacer tambien sumatorios anuales y que aparezca los meses que ha ingresado, importe y la suma total del año?

Gracias
  #8 (permalink)  
Antiguo 02/11/2009, 06:10
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 16 años
Puntos: 0
Respuesta: ordenar por meses

Hay alguna forma de ordenar por fecha pero en formato europeo.
Tengo el campo id que suelen ser numeros, y fecha ingreso por 12-02-2008.

Hay alguna forma de sacar una consulta de los ingresos hechos por el id 20 y que se muestre en orden por meses los ingresos efectuados.

Me explico:

20 12-02-2008 20
20 24-03-2008 40
20 21-04-2008 30
20 15-05-2008 40

Gracias
  #9 (permalink)  
Antiguo 02/11/2009, 08:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ordenar por meses

order by str_to_date(campo_fecha,'%d-%m-%Y');

te sirve?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 02/11/2009, 08:25
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Respuesta: ordenar por meses

se me ocurre esto, no lo he probado pero creo que por aca va la solucion, separamos el mes del año y lo ordenamos

SELECT SUBSTRING(campo,0,CHAR_LENGTH (campo)-2) as mes, SUBSTRING(campo,CHAR_LENGTH (campo)-2,2) as año
FROM tabla
ORDER BY mes, año
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #11 (permalink)  
Antiguo 19/11/2009, 12:36
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 16 años
Puntos: 0
Respuesta: ordenar por meses

Si me sirve pero no me ordena por fechas....

select * from datos where id like '57' order by str_to_date(contable,'%d-%m-%Y')

57 14/10/2008 15
57 21/04/2008 20
57 21/05/2008 20
57 01/07/2008 100
57 21/07/2008 15
57 05/08/2008 15
57 21/08/2008 15
57 14/10/2008 15
57 21/10/2008 15
57 01/07/2009 100,00

De todas maneras, gracias



Cita:
Iniciado por huesos52 Ver Mensaje
order by str_to_date(campo_fecha,'%d-%m-%Y');

te sirve?
  #12 (permalink)  
Antiguo 19/11/2009, 12:40
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: ordenar por meses

Pero al final, ¿los fechas guardadas en ese campo están en formato DD-MM-YYYY o DD/MM/YYYY?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #13 (permalink)  
Antiguo 19/11/2009, 12:41
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 16 años
Puntos: 0
Respuesta: ordenar por meses

Gracias pero no me funciona,

te pego la sentencia sql :

SELECT SUBSTRING(contable,0,CHAR_LENGTH (contable)-2) as mes, SUBSTRING(contable,CHAR_LENGTH (contable)-2,2) as año
FROM datos
ORDER BY mes, año

#1305 - FUNCTION asuncion2db.CHAR_LENGTH does not exist

gracias de todas maneras

Cita:
Iniciado por omar1977 Ver Mensaje
se me ocurre esto, no lo he probado pero creo que por aca va la solucion, separamos el mes del año y lo ordenamos

SELECT SUBSTRING(campo,0,CHAR_LENGTH (campo)-2) as mes, SUBSTRING(campo,CHAR_LENGTH (campo)-2,2) as año
FROM tabla
ORDER BY mes, año
  #14 (permalink)  
Antiguo 19/11/2009, 13:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ordenar por meses

Cita:
#1305 - FUNCTION asuncion2db.CHAR_LENGTH does not exist
Cuidado con dejar espacios entre el nombre de las funciones y el paréntesis. En MySQL generan este error.

Prueba:
Código sql:
Ver original
  1. SELECT campo,
  2.   MONTH(STR_TO_DATE(TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(campo, ' ', -2), ' ',1)), '%d/%m/%Y')) Mes,
  3.   YEAR(STR_TO_DATE(TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(campo, ' ', -2), ' ',1)), '%d/%m/%Y')) Anio
  4. FROM tabla
  5. ORDER BY Anio, Mes
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 01/03/2010, 17:27
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 16 años
Puntos: 0
Respuesta: ordenar por meses

Me sirve pero no me termina de servir, el campo de fecha es opcional.
ya que he creado la tabla asi

17,17/03/2007,pedro lopez,20,1020 saldo, 307,2007
17,21/04/2008,pedro lopez,50,1820 saldo,408,2008

mi idea es ordenarlo asi

17 20, 307,2007
17 50,408,2008

asi me vendria genial...

he probado con la opcion group concat...

pero no me resuelve el tema

17 que me muestre todos los meses ingresados por el 17
asi

107 207 307 407 507 607 707 807 907 107 1107 1207 total
17 20 >total> 20

¿Se puede hacer algo asi?

Gracias
  #16 (permalink)  
Antiguo 01/03/2010, 17:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ordenar por meses

Cita:
ya que he creado la tabla asi

17,17/03/2007,pedro lopez,20,1020 saldo, 307,2007
17,21/04/2008,pedro lopez,50,1820 saldo,408,2008

mi idea es ordenarlo asi

17 20, 307,2007
17 50,408,2008
Eso sería simplemente indicar los campos en el ORDER BY , de la misma forma que tienen que ser considerados.
Tu problema inicial, además de haber definido incorrectamente el campo que más necesitabas, es que si lo haces opcional no hay forma de dar con una solución que no sea un mal parche...
Después del tiempo que ha pasado, posiblemente podrías haber incorporado el campo necesario y haber hecho una rutina que te normalizase el problema...
¿No serí amás simple eso, que intentar resolver algo que puede quedar desprolijo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 01/03/2010, 18:20
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 16 años
Puntos: 0
Respuesta: ordenar por meses

Voy a añadir 2 campos,mes y año

109
209
309
409
509
609
709
809
1009
1109
1209

2008
2009

¿me aconsejas que el mes sea 109 o 12009,209 o 22009?
Voy a añadir mas años, pero lo que necesito es que me ordene por id ingresos por los meses del 2007, luego los meses de ese mismo id del año 2008.

¿Crees que lo puedo ordenar de esa manera bien?
No entiendo esto que me comentas =>
definido incorrectamente el campo que más necesitabas
Gracias
  #18 (permalink)  
Antiguo 01/03/2010, 18:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ordenar por meses

Cita:
Voy a añadir 2 campos,mes y año

109
209
309
409
509
609
709
809
1009
1109
1209

2008
2009

¿me aconsejas que el mes sea 109 o 12009,209 o 22009?
Ninguno de esos: Mete un campo DATE e ingresa las fechas como aaaa-mm-01 y listo, lo podrás ordenar siempre como quieras. Como lo que necesitas es el mes y año, el día que le pongas a la fecha es irrelevante (para evitar problemas de límites, ponle 01).

Esto tiene dos ventajas:
1) Es más funcional paa las búsquedas y funciones de MySQL.
2) Ocupa menos espacio para guardar más información.

El formato que propones (109 o 12009,209 o 22009) es de lo peor que se puede usar, porque los ordenamientos serían o alfabéticos o numéricos, en cualqier caso te agruparía los meses pero no los años...

No trates de inventar el agujero del mate. Ya existe una forma de hacerlo estandarizada desde hace décadas, muy bien probada.

Cita:
definido incorrectamente el campo que más necesitabas
Si hubieses definido de entrada ese campo como DATE y lo hubieses hecho mandatorio, no tendrías este inconveniente que vienes arrastrando desde julio del año pasado...
Corregir sobre la marcha de un proyecto es calamitoso, lo sé, pero a veces es el único medio de lograr las cosas sin tantos dolores de cabeza.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 01/03/2010, 19:09
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 16 años
Puntos: 0
Respuesta: ordenar por meses

Ok una vez que termine de crear la tabla, voy a intentar importar la fecha al formato que me comentas...

Lo intente hace tiempo y me ponia 2020-11-09....lo cual no me vale...se que se usa de esta manera pero solo me sirve esos campos para ordenar los datos de manera ascendente...nada mas, que no me sirve como valor, lo que me vale es, el id, valor, mes,año.
solo necesito esos datos ordenados aun teniendo la fecha grabada como 01/02/2007.
No me sirve para nada salvo para ver el mes y el año del ingreso.

Gracias
  #20 (permalink)  
Antiguo 01/03/2010, 21:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ordenar por meses

Cita:
Lo intente hace tiempo y me ponia 2020-11-09....lo cual no me vale...se que se usa de esta manera pero solo me sirve esos campos para ordenar los datos de manera ascendente...nada mas, que no me sirve como valor, lo que me vale es, el id, valor, mes,año.
Nadie dice que uses el dato crudo. Simplemente que tenerlo te facilita una forma de ordenamiento más simple, por ejemplo:
Código MySQL:
Ver original
  1. FROM tabla
  2. ORDER BY id ASC, valor DESC, YEAR(fecha) ASC, MONTH(fecha) ASC ;
El hecho de tener una fecha correctamente almacenada facilita precisamente la flexibilidad de las consultas con funciones simples.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:09.