Pregunta

Tengo problemas con Microsoft Access 2003, que se queja de esta declaración:

select cardnr
from change
where  year(date)<2009
group by cardnr
having max(time+date) = (time+date) and cardto='VIP'

Lo que quiero hacer es, para cada cardnr distinta en el cambio de la tabla, para encontrar la fila con la más reciente (fecha + hora) que es antes del año 2009, y luego sólo tienes que seleccionar las filas con cardto = 'VIP'.

validador dice que está bien, Acceso dice que no pasa nada .

Este es el mensaje que recibo: "Ha intentado ejecutar una consulta que no incluya la expresión especificada 'max (hora y fecha) = tiempo + fecha y cardto =' VIP 'y cardnr =' como parte de un agregado función ".

Podría alguien explicar lo que estoy haciendo mal y la forma correcta de hacerlo? Gracias

Nota:. El nombre de campo y de mesa son traducidos y no chocan con ningún palabras reservadas, no tengo problemas con los nombres

¿Fue útil?

Solución

Trate de pensar en ello como esto - se aplicarán después de la agregación se realiza. Por lo tanto, no se puede comparar a las expresiones no agregados (ni por hora y la fecha, ni por cardto).

Sin embargo, para conseguir la última (principio es el mismo para conseguir filas relacionadas con otras funciones agregadas como weel) fecha y hora que usted puede hacer algo como:

SELECT cardnr
FROM change main
WHERE time+date IN (SELECT MAX(time+date) 
                    FROM change sub
                    WHERE sub.cardnr = main.cardnr AND 
                          year(date)<2009 
                          AND cardto='VIP')

(suponiendo que parte de la fecha de su campo de tiempo es el mismo para todos los registros, que tiene dos campos de fecha / hora no está en su mejor interés y también el uso de palabras reservadas para los nombres de campo puede ser contraproducente en algunos casos)

Funciona porque la subconsulta se filtra sólo en los registros que usted está interesado en de la consulta externa.

La aplicación de ese mismo año (fecha) <200 y cardto = 'VIP' a la consulta externa pueden mejorar aún más el rendimiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top