Suma de fechas consecutivas en access con código sql

Tengo una tabla de viajes en donde los viajeros tienen sus fechas de salida y sus fechas de regreso, pero si el viajero extiende su viaje por más días, se agrega una nueva fecha de salida y una nueva fecha de regreso aun cuando no ha vuelto de la ciudad a la que viajo, mi pregunta es como puedo contar las fechas continuas de cada viajero ya que cada uno de ellos tiene varios viajes al anio y no todos son consecutivos, Esto lo tengo en access 2013 y estoy haciendo la consulta con sql de access

Name id Permamentcity travelingcity Startday endday
Adrian Eduardo Arroyo Zambrano    22    Guayaquil         Quito            08/11/2018    09/11/2018
Adrian Eduardo Arroyo Zambrano    23    Guayaquil         Quito            03/01/2019    04/01/2019
Adrian Eduardo Arroyo Zambrano 24 Guayaquil Quito 05/01/2019  05/01/2019

en el ejemplo se muestra como el viaje del registro 22 tiene una fecha muy separada al registro 23, pero el registro 23 es un viaje continuo con el registro 24, lo que quiero es que los viajes continuos los pueda sumar como un registro y los viajes no continuos los sume como registro independiente.

Este es el codigo que estoy utilizando y que no me funciona porque nada mas concatena en una linea y me pide un parametro que no se cual darle:

SELECT 
Name, MIN(Startday) as starday, MAX(endday) as endday, SUM(travelingdays) as continues
FROM 
sheet1 
GROUP BY 
Name

me pueden ayudar

2 respuestas

Respuesta
1

Me apuesto tu dinero a que el error te lo da en TravelingDays. ¿Dónde está ese campo?

Mira, como los idiomas no son lo mio te lo pongo en "cristiano". Si tengo la tabla

Creo la consulta como

Con lo cual al abrir la consulta

Aunque parezca que las diferencias entre Fechas no se corresponden con los días es porque en cada registro el día de salida no lo cuenta como estancia, ya que ese día se va( al menos se supone, y comprueba que haya pagado).

De todas formas, lo que haría, que no tiene porque servirte, cuando un cliente quiere "prorrogar" la estancia, sería decirle que me abriera el formulario sólo con el último registro de ese cliente y le modificaría la fecha de salida.

Gracias por tu respuesta, tengo una pregunta; que pasa cuando carlos sanchez viaja del 1-01-2019 al 20-01-2019 y luego del 31-01-2019 al 28-02-2019 y del 1-03-2019 al 10-03-2019, en teoría debo de tener a carlos dos veces, una con la primera fecha que esta separada por más de un día y el segundo con las fechas sumadas porque tiene de diferencia 1 día, es decir: debe aparecer,

carlos sanches 20 dias

carlos sanches 40 dias.

¿La consulta que me enviaste puede hacer eso?

Primero, ya te dije que yo no lo haría sí. Por otro lado, sigo diciendo que el día que te vas, normalmente no se cuenta( desde luego, no se te ocurra cobrármelo).

Segundo, tal como lo pretendes no creo que se pueda hacer con lenguaje SQL, personalmente lo considero muchísimo menos versátil que el VB.

Mira, si tengo el formulario(debes imaginarlo vacío, y el campo Orden como oculto, además he obviado los campos Origen y Destino para que la imagen me quepa toda en la pantalla) y empiezo a rellenar datos

Me deja la tabla Viajes igual

Pero una tabla que he creado, con los mismos campos, llamada Aux me la deja como tu quieres

Lo que hace, es

- Inserta en la tabla Aux el registro que acabas de escribir en el formulario.

- Pero si se da el caso de que la fecha de Inicio es 1 día superior a la fecha fin del registro anterior de ese mismo cliente que estás rellenando, convierte la Fecha fin del registro anterior en la fecha fin del registro corriente, calcula la diferencia de días y elimina de la tabla Aux ese registro que acabas de grabar en la tabla Viajes.

El código del evento Después de actualizar del cuadro de texto FechaFin es

Private Sub FechaFin_AfterUpdate()
Dias = FechaFin + 1 - FechaInicio
Orden = Nz(DCount("*", "viajes", "nombre='" & Me.Nombre & "'")) + 1
DoCmd.RunCommand acCmdSaveRecord
DoCmd. RunSQL "insert into aux(nombre, fechainicio, fechafin, dias, orden)values(nombre, fechainicio, fechafin, dias, orden)"
If FechaInicio = DLast("fechafin", "aux", "nombre='" & Me.Nombre & "' and orden=(" & Me.Orden & ")-1") + 1 Then
DoCmd.RunSQL "update aux set fechafin=forms!viajes!fechafin where nombre='" & Me.Nombre & "' and orden=" & Me.Orden & "-1"
DoCmd.RunSQL "update aux set dias=fechafin+1-fechainicio"
DoCmd.RunSQL "delete * from aux where orden=dlast(""orden"",""aux"",""nombre='" & Me.Nombre & "'"")"
End If
End Sub

De todas formas, si ves que tienes alguna pega y quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando el ejemplo.

Si lo haces, en el asunto del mensaje pon tu alias Paco Alonso, ya que si no sé quien me escribe ni los abro.

Respuesta
1

Veo que aún no se da respuesta a su pregunta, creo que le interesa saber los viajes de días continuos y descontinuos. Estoy de acuerdo con que no es posible realizarlo en Access con SQL, pero si es posible mediante código, he preparado este ejemplo.

En el subformulario superior se registran los viajes y en subformualario inferior se obtiene la información consolidada al hacer clic sobre el botón "Ver Resultado". Si aún le sirve escríbame a [email protected] y con gusto le suministro el ejemplo, es sencillo consta de 2 tablas 3 formularios y un módulo de VBA. Favor hacer referencia en el Asunto a la consulta de TodoExpertos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas