Access - Código MySQL a ACCESS

 
Vista:
sin imagen de perfil

Código MySQL a ACCESS

Publicado por prysk (2 intervenciones) el 09/01/2017 09:22:05
Hola a todos,

tengo que pasar una consulta que funciona perfectamente a en MySQL a ACCESS, y no consigo hacerlo funcionar. Mi nivel de VBA es pésimo así como de ACCESS. A ver si alguien me pudiera echar una mano. Gracias.

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
SELECT
    LAC.numcrotal,
    LAC.max_litros,
    LAC.last_litros,
    LAC.prev_last_litros,
    LAC.num_mediciones,
    (
        CASE
        WHEN LAC.num_mediciones = 1 THEN 0
        WHEN LAC.last_litros = LAC.max_litros THEN ( LAC.max_litros - LAC.prev_last_litros )
        ELSE ( LAC.last_litros - AC.max_litros)
        END
    ) as 'diff'
FROM (
    SELECT
        L.numcrotal,
        ( SELECT MAX(SL.litros_normalizados) as 'max_litros' FROM lactaciones SL WHERE 
 
SL.numcrotal = L.numcrotal GROUP BY SL.numcrotal ) as 'max_litros',
        ( SELECT SL.litros_normalizados as 'last_litros' FROM lactaciones SL WHERE 
 
SL.numcrotal = L.numcrotal ORDER BY SL.fecha DESC LIMIT 1 ) as 'last_litros',
        ( SELECT SL.litros_normalizados as 'prev_last_litros' FROM lactaciones SL WHERE 
 
SL.numcrotal = L.numcrotal ORDER BY SL.fecha DESC LIMIT 1 OFFSET 1 ) as 'prev_last_litros',
        count( L.numcrotal ) as 'num_mediciones'
    FROM lactaciones L
    GROUP BY L.numcrotal
    ORDER BY L.numcrotal ASC
) as LAC
WHERE LAC.num_mediciones > 1;
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 Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Código MySQL a ACCESS

Publicado por Manuel (171 intervenciones) el 11/01/2017 19:02:51
Por desgracia cada SGBD tiene un SQL ligeramente distinto. En este caso veo partes enteras que directamente no te funcionan porque o directamente son propias de MySQL (como el uso de LIMIT, que no encontrarás en otros SGBD) o porque Access no lo soporta (CASE), etc...

Si quieres coger el primer elemento de una consulta, subconsulta, etc... pues en ACCESS solo tienes la opción de TOP (ej: SELECT TOP 1 * FROM facturas).

En cuanto a la construcción CASE, pues podrías intentarlo con IIF (mira aquí: https://www.techonthenet.com/access/functions/advanced/iif.php), que no es lo mismo, pero podría servirte.

No hace falta que cuando nombras un campo calculado o renombras, pues que al identificador lo remarques entrecomillado ('campo' no hace falta).

Después seguramente haya alguna cosita más, pero para empezar creo que tienes trabajo ya. Vete publicando las dudas que te vayan surgiendo y te vamos ayudando. Pero, repito, intenta aplicar lo que te digo, porque todo eso tienes que cambiarlo fijo.

Espero haberte sido de ayuda y animo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Código MySQL a ACCESS

Publicado por prysk (2 intervenciones) el 17/01/2017 15:04:48
Muchas gracias por tu respuesta.

Lo tengo ya casi todo implementado. Estoy atascado en la obtención de la penúltima fecha "previous to last date". Sí que puedo obtener las 2 últimas, pero no sé cómo puedo sacar sólo la penúltima.

SELECT LactacionesFINALIZADAS.numcrotal, LactacionesFINALIZADAS.FechaUltControlLactación
FROM LactacionesFINALIZADAS
WHERE (((LactacionesFINALIZADAS.[FechaUltControlLactación]) In (SELECT TOP 2 T.FechaUltControlLactación FROM LactacionesFINALIZADAS T WHERE numcrotal = LactacionesFINALIZADAS.numcrotal ORDER BY T.FechaUltControlLactación Desc)));
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