SQL - Selección de los n primeros días de mes con registros

 
Vista:
sin imagen de perfil

Selección de los n primeros días de mes con registros

Publicado por E. Cliten (8 intervenciones) el 23/04/2014 10:23:53
Me ha surgido una nueva duda relacionada con fechas. En la tabla que describo:
Tabla TMP
Columnas
Empresa, Fecha, pagos
Fecha es de tipo DATE ej.(2007-8-13)
(Por si tuviera algún interés la B.D. es Mysql)

La consulta:
1
SELECT *,min(fecha) from tmp GROUP BY MONTH(fecha),YEAR(fecha)
(select, sugerida recientemente en este foro)
Me devuelve los registros correspondientes al primer día del mes en que se ha hecho un pago a cada empresa.
No se me ocurre la forma de seleccionar, por ejemplo, los cinco primeros días en el que se ha efectuado un pago a cada empresa. (A una empresa solamente se le pueden emitir pagos una vez al día)
Quedo a la espera de vuestra ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 135
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Selección de los n primeros días de mes con registros

Publicado por xve (284 intervenciones) el 23/04/2014 14:13:42
Hola, no entiendo muy bien a que te refieres con forma de seleccionar, por ejemplo, los cinco primeros días en el que se ha efectuado un pago a cada empresa

Nos puedes comentar con mas detalle?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Selección de los n primeros días de mes con registros

Publicado por E. Cliten (8 intervenciones) el 23/04/2014 17:31:23
Gracias Xve, trato de expresarmen mejor.
Por cada empresa y por cada año y mes quiero seleccionar los n primeros registros (por día del mes y año) que aparecen en la tabla.
Sigue un ejemplo de dicha tabla con una sola empresa y un solo año
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
+--------+------------+-------+
|empresa |  fecha     | pagos |
+--------+------------+-------+
| agusti | 2014-01-02 |  303  |
| agusti | 2014-01-06 |  186  |
| agusti | 2014-01-07 |  512  |
| agusti | 2014-01-13 |  345  |
| agusti | 2014-01-14 |  347  |
| agusti | 2014-01-15 |  384  |
| agusti | 2014-01-21 |  232  |
| agusti | 2014-01-22 |  293  |
| agusti | 2014-01-29 |  366  |
| agusti | 2014-01-31 |  346  |
| agusti | 2014-02-03 |  281  |
| agusti | 2014-02-04 |  307  |
| agusti | 2014-02-14 |  158  |
| agusti | 2014-02-17 |  514  |
| agusti | 2014-02-24 |  490  |
| agusti | 2014-02-25 |  972  |
| agusti | 2014-02-26 |  457  |
| agusti | 2014-02-27 |  334  |
| agusti | 2014-02-28 |  181  |
| agusti | 2014-03-03 |  426  |
| agusti | 2014-03-04 |  195  |
| agusti | 2014-03-05 |  116  |
| agusti | 2014-03-07 |  254  |

El resultado del select , para n=3, debería ser:
1
2
3
4
5
6
7
8
9
10
11
12
+--------+------------+-------+
|empresa |  fecha     | pagos |
+--------+------------+-------+
| agusti | 2014-01-02 |  303  |
| agusti | 2014-01-06 |  186  |
| agusti | 2014-01-07 |  512  |
| agusti | 2014-02-03 |  281  |
| agusti | 2014-02-04 |  307  |
| agusti | 2014-02-14 |  158  |
| agusti | 2014-03-03 |  426  |
| agusti | 2014-03-04 |  195  |
| agusti | 2014-03-05 |  116  |
Para otras empresas estas fechas varían.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Selección de los n primeros días de mes con registros

Publicado por E. Cliten (8 intervenciones) el 25/04/2014 08:56:20
En otro hilo he comentado que una query muy similar, algo más simple, no funciona como yo esperaba.
Es por esto que copio en este hilo el resultado (anómalo) del caso simple donde los registros a seleccionar por cada mes y año se reducen a 1.
Después de unos días que trataba de solucionar una query algo más complicada me he dado cuenta de que la select no actúa como yo esperaba, solamente el fruto de la casualidad hizo que pareciera correcta la query.
He realizado dos querys sobre la misma tabla, una para seleccionar las fechas menores y pagos y otra para seleccionar las fechas mayores y pagos.
tabla en mysql nombre bor (fecha, pagos)
Nótese que la columna Max(fecha) no coincide con fecha, en cambio si coincide con la versión Min(fecha) (SUPONGO POR CASUALIDAD)
Por lo que el campo pagos no se corresponde con la fecha de Max(fecha)

De donde se deduce que esta query no es la adecuada para seleccionar los primeros o últimos registros de cada mes y año con sus pagos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
select fecha, pagos, Max(fecha) from bor group by Year(fecha), Month(fecha);
+------------+-------+------------+
|   fecha    | pagos | Max(fecha) |
+------------+-------+------------+
| 2011-01-03 | 135 | 2011-01-31 |
| 2011-02-01 | 283 | 2011-02-28 |
| 2011-03-01 | 256 | 2011-03-31 |
| 2011-04-01 | 212 | 2011-04-29 |
| 2011-05-02 | 139 | 2011-05-31 |
 
select fecha, pagos, Min(fecha) from bor group by Year(fecha), Month(fecha);
+------------+-------+------------+
|   fecha    |pagos| min(fecha) |
+------------+-------+------------+
| 2011-01-03 | 135 | 2011-01-03 |
| 2011-02-01 | 283 | 2011-02-01 |
| 2011-03-01 | 256 | 2011-03-01 |
| 2011-04-01 | 212 | 2011-04-01 |
| 2011-05-02 | 139 | 2011-05-02 |

¡Sigo necesitando ayuda!, por favor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Selección de los n primeros días de mes con registros

Publicado por Leopoldo Taylhardat (93 intervenciones) el 28/04/2014 13:25:47
Saludos...


debes dividir la fecha...


where year(fecha) = 2014 (o una variable) and month(fecha) = 01 (o una variable) and day(fecha) <= 1(,2,3,4,5... o una variable)...
Espero que te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Selección de los n primeros días de mes con registros

Publicado por E. Cliten (8 intervenciones) el 29/04/2014 19:01:23
No llego a entender como aplicar esta separación de fecha al problema que planteo, te agradecería un ejemplillo algo más detallado. De todas formas muchas gracias Leopoldo.
Como han pasado varias horas desde que me surgió el problema,he encontrado una solución de la que no estoy muy convencido por presuponer que debe de haber una query más sencilla y eficiente que resuelva esta simple cuestión.
La solución encontrada es:
1
select * from tmp  where fecha in (select min(fecha) from tmp where empresa=VARIABLE1 group by year(fecha), Month(fecha)) and empresa=VARIABLE1 ;

En un programa en Python me ha funcionado pasando a esta query las distintas empresas en VARIABLE1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar