Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-04-2015
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
días de la semana

Hola, uso MySQL y quiero hacer una consulta que me diga el monto de las ventas de un período (mes, rango de fechas, ...) agrupado por el día de la semana, en otras palabras saber cuánto se vendió los lunes, los martes, ...

Tengo el siguiente SQL pero solo he podido llegar hasta el índice del día de la semana:
Código SQL [-]
SELECT WEEKDAY(fraFecha), SUM(dfrCantidad) AS TotalCANTIDAD
FROM detallefra
INNER JOIN factura ON fraIdPrefijo = dfrIdPrefijo AND fraNroFactura = dfrNroFactura
WHERE fraFecha BETWEEN :pFch1 AND :pFch2
GROUP BY WEEKDAY(fraFecha)
ORDER BY WEEKDAY(fraFecha)

La pregunta es, cómo hago para que en lugar de 0, 1, 2, 3, 4, 5, 6, 7 me salga Lunes, Martes, Miércoles, .... Domingo ??

Saludos,

GustavoSV

Última edición por ecfisa fecha: 16-04-2015 a las 20:04:11. Razón: Quitar caritas del código
Responder Con Cita
  #2  
Antiguo 16-04-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Gustavo.

No uso MySQL, pero fijate si te sirve la función DAYNAME() que según indica el enlace, devuelve el nombre del día de la semana.

Yo intentaría algo así:
Código SQL [-]
SELECT DAYNAME( WEEKDAY(fraFecha) ) ...
Pero no tengo forma de comprobarlo, es sólo una presunción.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 16-04-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Podes hacerlo en un evento desde Delphi o en la propia sentencia SQL (nunca lo hice yo de esta manera)

Desde delphi, tenes que asignar un metodo en el evento OnGetText del campo. Asi como accedes al valor usando FieldByName('fraFecha').Value, podes hacer algo como esto

Código Delphi [-]

interface

  TForm1 = class(TForm)
  ...
  private
    function WeekDayToStr(Day: integer): string;
    procedure fraFechaOnGetText(Sender: TField; var Text: string; DisplayField: boolean);

Código Delphi [-]
function TForm1.WeekDayToStr(Day: integer): string;
begin
  case Day of
    0: Result := 'Lunes'; // o domingo, eso no se como lo modelas
    1: Result := 'Martes';
    .. 
  end;
end;

procedure TForm1.fraFechaOnGetText(Sender: TField; var Text: string; DisplayField: boolean);
begin
    if not(Sender.IsNull) then
        Text := WeekDayToStr(Sender.AsInteger);
end;

Y en algun evento antes de pedir los datos, o en el OnCreate, OnShow del form.. asignas a tu campo este evento, asi

Código Delphi [-]
  with DataSet, Query, etc.. do  
    FieldByName('fraFecha').OnGetText := fraFechaOnGetText;

Obviamente el DataSet, Query.. debe estar creado (no es NIL) y abierto, para que pueda "ver" al campo

Saludos
Responder Con Cita
  #4  
Antiguo 16-04-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Gustavo.

Leyendo un poco más, veo que simplemente enviando a la funcion DAYNAME la fecha como argumento obtenes el nombre día, vg.:
Código SQL [-]
SELECT DAYNAME('2015-04-16')
(Thursday)

La variable de sistema lc_time_names te permite cambiar el idioma, ejemplo:
Código SQL [-]
SET lc_time_names = 'es_CO';
En este enlace, MySQL Server Locale Support, vas a encontrar como configurar distintas variables.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 16-04-2015
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
la función WEEKDAY() regresa un número entre 0 y 6, por lo tanto DAYNAME() no me sirve porque espera un argumento de tipo fecha.

Aplicaré lo de configurar el lenguaje, interesante ...

Voy a intentar con lo que me dice AgustinOrto, a ver como lo pongo en la clase que tengo para graficar.

Gracias !
Responder Con Cita
  #6  
Antiguo 16-04-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por gustavosv Ver Mensaje
la función WEEKDAY() regresa un número entre 0 y 6, por lo tanto DAYNAME() no me sirve porque espera un argumento de tipo fecha.
¿ Pero no le estas pasando un valor tipo fecha a WEEKDAY() ?
Código SQL [-]
SELECT WEEKDAY(fraFecha), SUM(dfrCantidad) AS TotalCANTIDAD
FROM detallefra
...
Si no interpreté mal, bastaría con reemplazar la función WEEKDAY() por DAYNAME() para obtener el nombre del día:
Código SQL [-]
SELECT DAYNAME(fraFecha), SUM(dfrCantidad) AS TotalCANTIDAD
FROM detallefra
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 16-04-2015
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
Hola Daniel, claro, tienes razón, no la veía de esa manera, me quedó así con idioma y todo ...:

Código SQL [-]
SET lc_time_names = 'es_CO';

SELECT DAYNAME(fraFecha), SUM(dfrCantidad) AS TotalCANTIDAD
FROM pos_detallefra
INNER JOIN pos_factura ON fraIdPrefijo = dfrIdPrefijo AND fraNroFactura = dfrNroFactura
WHERE fraFecha BETWEEN :Fch1 AND :Fch2
GROUP BY DAYNAME(fraFecha)
ORDER BY WEEKDAY(fraFecha);

estaba embelesado con el WEEKDAY() ... ahora solo lo uso para ordenar

Gracias !
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
diferencia de dias , suponiendo que los meses son de 30 dias. ingabraham Varios 30 12-09-2010 22:37:48
ordenar por dias de la semana pnsd_89 PostgreSQL 1 11-12-2007 21:57:18
Aprende los días de la semana con Hulk Hogan Ñuño Martínez Humor 1 10-06-2007 05:00:42
Consulta Sql para los 7 dias de la semana Ricsato SQL 5 28-05-2005 20:17:31
Contar dias de la semana entre fechas lolobs Varios 1 04-09-2003 16:11:24


La franja horaria es GMT +2. Ahora son las 12:58:47.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi