Access - Fecha anterior a la ultima

 
Vista:
Imágen de perfil de Jose
Val: 71
Ha disminuido su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Fecha anterior a la ultima

Publicado por Jose (131 intervenciones) el 17/08/2022 16:40:38
Buen dia, Espero se encuentren bien

Si alguien me puede decir como obtener una consulta
Explico, necesito saber en que fecha fue la salida de un articulo pero no de la ultima o una especifica como regularmente lo hago,,

Lo que necesito es obtener la fecha de la salida antes de la ultima,,,

ejemplo:

esta es la tabla de salidas
Empl Item Salida
00003 13286 5/17/2022
00003 13286 5/4/2022
00003 13286 4/27/2022
00003 13286 4/19/2022
00003 13286 3/14/2022
00007 13286 5/16/2022
00007 13286 5/8/2022
00007 13286 4/27/2022
00007 13286 4/19/2022
00007 13286 3/14/2022

que la consulta me de esto:

Empl Item Salida
00003 13286 5/4/2022
00007 13286 5/8/2022

De antemano agradezco la atencion,,, saludos
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

Fecha anterior a la ultima

Publicado por Anonimo (3316 intervenciones) el 17/08/2022 17:49:51
Para obtener la ultima fecha, se puede utilizar la función DMax.

Se puede condicionar por 'Item' y 'Empl' o solo por una de las condiciones.

Obtenida esta fecha, se vuelve a utilizar la misma función para obtener la mayor de las menores (la misma condición que antes añadiendole que la fecha sea menor a la calculada).

Otra opción es generar una consulta que filtre por Empl + Item (o uno de los dos), condicionarla para que devuelva dos valores (Top 2) y orden ascendente, con lo que 'la anterior' será el primer registro devuelto y el dato que devolverá la función DLookup sin necesitar aplicar condiciones.

Si se desease 'la anterior de la anterior' es lo mismo, pero condicionando la consulta para que devuelva tres registros (Top 3) y así obtener la última, la penúltima y la ante-penúltima.
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
Imágen de perfil de Jose
Val: 71
Ha disminuido su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Fecha anterior a la ultima

Publicado por Jose (131 intervenciones) el 17/08/2022 19:31:44
Gracias Anonimo,,,
Te comento que esto si lo puedo realizar,,
lo que no puedo es obtener una consulta (query) de la lista de todos los empleados con las salidas (item) que se han registrado la penultima vez

Si aplico el top 2 o 3 solo me muestra esos registros (los 2 o 3 primeros) pero requiero que sea una lista general con el penúltimo de cada empleado-item independiente de cuando haya sido

Esta consulta la necesito para incluirla en un reporte que ya tengo, donde me indica la ultima salida, pero necesito que se muestre cuando fue la anterior, para determinar cuanto tiempo transcurrió entre esas 2 salidas

aclaro que es un reporte mensual general de salidas, no es especifico de un articulo o de una fecha, por tanto tengo que descartar cualquier filtro referente y enfocarme en la condicion de que sea la penultima fecha de salida del articulo por cada empleado

esto es para determinar cuanto tiempo les duro su equipo de proteccion personal proporcionado por la empresa a cada persona
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

Fecha anterior a la ultima

Publicado por Anonimo (3316 intervenciones) el 18/08/2022 11:28:48
La solución aportada es adecuada para un registro, si se utiliza de forma repetitiva (para muchos usuarios) también funcionara, pero al utilizar dos funciones de dominio encadenadas puede ser muy lenta.

Para aplicar una solución adecuada se necesita conocer el entorno real,.
Si se va a utilizar para control de muchos usuarios y de muchos elementos por usuario el volumen de datos a tratar puede ser importante.y la presentación de resultados es lo fundamental para que el esfuerzo no sea en vano.

Exactamente que resultados se busca mostrar, en principio están (para cada empleado) una serie indeterminada de artículos (que puede ser o no igual para todos) y por cada articulo dos fechas mas un calculo con las fechas.

Supongo que el formato de presentación de los resultados ya esta perfilado, a mi se me ocurre este:
Una tabla de cruzamiento de artículos y empleados, como solo permite un cruce, en ese cruzamiento mostrar las fechas y el calculo de su diferencia en modo texto (concatenando los elementos).
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
Imágen de perfil de Eduardo

Fecha anterior a la ultima

Publicado por Eduardo (317 intervenciones) el 24/08/2022 22:35:56
Esta consulta le sirve

1
2
3
4
5
SELECT tblSalidas.Emp, Last(tblSalidas.Item) AS Item, Max(tblSalidas.Salida) AS Penultimo
FROM tblSalidas
WHERE (((tblSalidas.Salida)<((select Max(Salida ) from tblSalidas)-1)))
GROUP BY tblSalidas.Emp
ORDER BY tblSalidas.Emp;


penultimo

Es válido si el Item es el mismo de acuerdo con la pregunta, si no importa el Item lo puede suprimir.
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
Imágen de perfil de Eduardo

Fecha anterior a la ultima

Publicado por Eduardo (317 intervenciones) el 12/09/2022 22:14:41
José, aunque un poco tarde, pero me interesó bastante su pregunta, la cual no es posible de resolver con el SQL de Access, toda vez, que no permite manejar particiones y muchas cosas más.

Aunque posiblemente por ahora no entienda el código le quiero mostrar como esto si es posible utilizando PostgreSQL como servidor de datos aprovechando el lenguaje SQL avanzado que tiene este gestor, a la vez, esto sirve para refutar las afirmaciones que hace Anónimo (Alias Enrique en TodoExpertos), quien afirma que usar PostgreSQL con Access para bases de datos pequeñas el rendimiento es pobre, toda vez que desconoce las bondades que nos brinda Access con PostgreSQL.

Tabla Inicial

qry_Penultima_tabla
He exportado a PostgreSQL la tabla para crear una consulta de Paso a Través (algo que la mayoría de los usuarios nunca han utilizado). Si no estoy mal su pregunta es obtener la penúltima fecha de la salida de un artículo por vendedor e item.. Esto lo hago utilizando particiones en PostgreSQL, pero lo hago desde ACCESS con la siguiente función suministrada por Microsoft que adapte para PostgreSQL

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Public Function CreaQueryPenultimaFila(SPTQueryName As String)
 
'Función para crear una consulta paso a través y
'obtener la penultima fila de un grupo
'Desde Access con PostgreSQL
'Requiere referenciar
'                       Microsfot ActiveX Data Objectc 6.1 Library
'                       Microsfot ADO Ext. 6.0 for DLL and Security
'Fuente:
'    Microsoft
'Adpatación para PostgreSQL
'Eduardo Pérez Fernández
'Fecha: 10/09/2022
 
'Parametros:
'               SPTQueryName  --> Nombre de la consulta a crear
 
 On Error GoTo hay_error
 
Dim cat As ADOX.Catalog
Dim cmd As ADODB.Command
Dim strSQL As String
Dim tb As DAO.TableDef
Dim MiQueryDef As QueryDef
 
With CurrentDb
  For Each MiQueryDef In CurrentDb.QueryDefs
   If MiQueryDef.Name = SPTQueryName Then
   .QueryDefs.Delete (SPTQueryName)
   .QueryDefs.Refresh
   Exit For
   End If
  Next
 
 
End With
 
 
Set cat = New ADOX.Catalog
Set cmd = New ADODB.Command
 
cat.ActiveConnection = CurrentProject.Connection
 
Set cmd.ActiveConnection = cat.ActiveConnection
 
 
  strSQL = "select *" & vbCrLf
  strSQL = strSQL & "        FROM (  select t.*" & vbCrLf
  strSQL = strSQL & "           ,          row_number() over (partition" & vbCrLf
  strSQL = strSQL & "           by ""Emp"",""Item"" " & vbCrLf
  strSQL = strSQL & "    ORDER BY ""Salida"" desc) as rn  " & vbCrLf
  strSQL = strSQL & "        FROM tblsalidas t) t" & vbCrLf
  strSQL = strSQL & "       WHERE rn =2" & vbCrLf
  strSQL = strSQL & "    ORDER BY ""Emp"";"
 
  cmd.CommandText = strSQL
  cmd.Properties("Jet OLEDB:ODBC Pass-Through Statement") = True
 
 
cmd.Properties _
     ("Jet OLEDB:Pass Through Query Connect String") = _
       "ODBC;DSN=dbconta;"
 
  cat.Procedures.Append SPTQueryName, cmd
 
 
 
  Set cat = Nothing
  Set cmd = Nothing
 
 
hay_error_exit:
   Exit Function

Para llamar la función se puede hacer desde cualquier parte, en este caso lo hago desde la ventana de inmediato.

1
?CreaQueryPenultimaFila("qryPenultimaTodoExpertos")

Esto me crea una consulta de Paso a Través la cual puedo utilizar para cualquier formulario o reporte.

EJECUCIÓN DE LA CONSULTA

qry_Penultima_consulta

Disculpe si esto lo hace perder el tiempo, pero es importante saber que Access con PostgreSQL puede ir muy lejos y no es como Anómino dice que es un fracaso con Access. Lo que le mostrado es fundamental para utilizar Access con PostgreSQL en la nube porque las consultas se ejecutan en el servidor y no en el motor Jet de Access que bastante pobre, además, nos permite elaborar consultas que para Access no tienen sentido, como la que he elaborado. No obstante. pude haber creado una vista, pero esto implica vincularla con Access, pero no es conveniente en aplicaciones en la nube, puede ser práctico cuando no hay parámetros en el código SQL como este ejemplo.

Un saludo desde Colombia
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

Fecha anterior a la ultima

Publicado por Anonimo (3316 intervenciones) el 13/09/2022 02:16:10
Nadie le niega sus cualidades a PostgreSQL a pesar de algunos de sus usuarios 'fanáticos o forofos'.

Access se conecta a almacenes de datos de todo tipo (es muy versátil) y puede trabajar con 'consultas de paso a través' (esto es se ejecutan en el servidor de datos) y como son 'de paso a través' utilizara los recursos que tenga la implementación del SQL en el servidor de datos (y el programador domine).

Reitero lo que publican las comparativas de entornos de bases de datos (SQLServer, MySQL, MariaDb .... Oracle y PostgreSQL).

PostgreSQL nació con el propósito de emular a Oracle y es ese entorno (datos masivos) donde le reconocen un buen rendimiento, pero en entornos medianos/pequeños (el de Access) tiene una gran caída de rendimiento que la hace peor que las no buscan el nicho de mercado de Oracle.
(bajo rendimiento no es: 'no funciona', es: para eso mismo 'los hay mejores')

-------------
Una SQL que obtiene la fecha anterior a la última de cada conjunto (Emp + Item) en Access es esta:

SELECT Tabla1.Emp, Tabla1.Item, Max(DMax("Salida","tabla1","Emp = '" & [emp] & "' and Item =" & [item] & " And cdbl(Salida) < " & CDbl(DMax("Salida","tabla1","Emp = '" & [emp] & "' and Item =" & [item])))) AS Penultima_Fecha
FROM Tabla1
GROUP BY Tabla1.Emp, Tabla1.Item;

Utilizando los datos publicados se obtiene esto:

Emp Item Penultima_Fecha
00003 13286 04/05/2022
00003 14001 10/08/2022
00007 13286 08/05/2022
00007 15001 07/08/2022

Y si por la cantidad de datos la consulta se volviera lenta, con una función en DAO se obtiene la velocidad que le falta (Access tiene mucho que ofrecer antes de necesitar soluciones externas

El 'gran problema' de Access: el trabajar en la nube ...
No hay que olvidar que Access nació hace 30 años (versión 1.0 en disquetes de 720k), tiempos de las BBS, 'Windows Trabajo en Grupo' o OS2 (más tarde Warp), y donde las redes iban a un Mbit/s sobre coaxial.

Para aquellos que busquen externalizar datos, pueden acudir a la versión (gratuita y limitada en volumen de datos) de SQL Server que es su alternativa 'más familiar' (y que le permitirá escalar de forma transparente)
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
Imágen de perfil de Eduardo

Fecha anterior a la ultima

Publicado por Eduardo (317 intervenciones) el 13/09/2022 02:58:00
Aclaro no es que en Access no se puede hacer la consulta que pregunta el usuario, sino que utilizar Dmax() como lo explican en una tabla de gran tamaño puede llevar a que Access no responda. Todo lo que implique subconsultas con lleva a que se vea afectado el rendimiento. Eso que esta es una consulta muy simple, por ejemplo, y si ¿quiero extraer determinada fila del grupo? pasando como parámetro el número de fila, será que en Access se presta mediante SQL de forma fácil.

Ahora, no se trata de imponer PostgreSQL efectivamente esto también se pude hacer con MySQL, DBMaria, Oracle y SQL Server y posiblemente también pueden conectar Access en la nube con ellos.

Le pregunto a Anónimo y me gustaría aprender, ¿qué conexiones con los servidores de datos que nombre ha trabajado. ¿Me podría explicar alguno de ellos y ojalá con consultas de paso a través? Gracias sábelo todo
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

Fecha anterior a la ultima

Publicado por Anonimo (3316 intervenciones) el 13/09/2022 23:50:19
Eduardo, no eres merecedor de respuestas (por la falta de ética al plantearlas).

La conexión a bases de datos externas no soy yo 'quien las fabrica', son los creadores de esos entornos los que publican como hacerlo, el que tiene la necesidad es quien ha de aplicarlas (y si dispone de recursos: hacerlo bien o por lo menos no peor que lo publicado por los autores).

Debe de ser la primera vez en tu vida de programador (o lo que te consideres) que has utilizado decentemente los recursos que pone a disposición PostgreSQL, practica un poco, a lo mejor llegas a alguna parte y descubres un nuevo mundo (hasta ahora por ti desconocido) ...

Suerte en tu libre caminar hacia 'ninguna parte'.
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
Imágen de perfil de Eduardo

Fecha anterior a la ultima

Publicado por Eduardo (317 intervenciones) el 14/09/2022 00:01:25
Lamento su ignorancia y arrogancia. Demuestra que no tiene ni idea de uso de Aceess con servidores. Le recomiendo que explore no sabe de lo que se está perdiendo.
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
Imágen de perfil de Jose
Val: 71
Ha disminuido su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Fecha anterior a la ultima

Publicado por Jose (131 intervenciones) el 14/09/2022 19:02:11
Excelente, tomare en cuenta este aporte para explorar mas alla de PC,, muchas gracias Eduardo
Saludos desde Mexico
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
Imágen de perfil de Eduardo

Fecha anterior a la ultima

Publicado por Eduardo (317 intervenciones) el 15/09/2022 00:18:04
Gracias y no dude en probarlo. Un saludo desde Colombia
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