Bases de Datos > SQL Server
Consulta Entre Dos Tablas
(1/1)
Dieguinho.:
Hola tengo una pregunta, espero que puedan ayudarme.
No me sale la siguiente consulta:
(les pongo un ejemplo para que se entienda)
Hay dos tablas.
En la primera (Clientes) tengo guardados los datos de 10 clientes.
En la segunda (Pedidos) estan los datos de los pedidos que hacen estos clientes (por ej. cod. articulo y fecha)
Yo lo que necesitaria saber es cual fue el ultimo pedido que hizo cada uno basandome en la fecha.
O sea me tendria que traer 10 registros "Pedidos", uno por cliente, y que cada pedido sea el que tiene la fecha mas
proxima a la actual.
Estoy intentando con subconsultas pero todavia no di en la justa.
Saludos.
Dieguinho.:
Por si sirve de ayuda las tablas podrian ser de las sig. manera
Clientes
idcliente
Pedidos
idpedido
idcliente
fechapedido
descpedido
ElNapster:
Tienes en la tabla cliente: codigo, nombre,apellido
pedido: codcliente,codproducto,fecha_pedido,cantidad.
bueno siendo asi te pongo la sig. consulta.
--- Código: Text --- Select max(p.fecha_pedido) , pr.codigo , c.clienteFrom cliente c , producto pr , pedido p Where c.codigo = p.codcliente and pr.codigo = p.codproductoGROUP BY max(p.fecha_pedido) ,pr.codigo ,c.cliente Espero te sirva de ayuda..
:comp:
Dieguinho.:
Hola, gracias por la ayuda, pero me salio el siguiente error
"No se pueden usar agregados ni subconsultas en las expresiones de la lista de agrupación de la cláusula GROUP BY."
Voy a poner datos mas reales que tiene mi tabla, quiza queda mas claro para el que me pueda ayudar.
Una tabla se llama PDV (punto de venta), vendria a ser algo asi como sucursales. Y los datos que me sirven de ahi son:
Tabla PDV
--- Código: Text --- IdPDV Nombre902 NombrePDV902905 NombrePDV905 ... y asi son 28 en total.
Por otro lado tengo otra tabla que se llama BackupPDV en donde se lleva un registro de cuando envió cada sucursal el backup hacia la oficina central.
Tabla BackupPDV
--- Código: Text --- Id IdPDV FechaBackup FechaIngreso Observacion2 911 2000-07-15 00:00:00 2007-07-15 00:00:00 ok3 917 2000-07-15 00:00:00 2007-07-15 00:00:00 ok4 926 2007-07-15 00:00:00 2007-07-15 00:00:00 ok5 I15 2000-07-15 00:00:00 2007-07-15 00:00:00 ok6 I20 2007-07-15 00:00:00 2007-07-15 00:00:00 ok8 I40 2007-07-15 00:00:00 2007-07-15 00:00:00 ok9 I50 2000-07-15 00:00:00 2007-07-15 00:00:00 ok ... puede que algun PDV todavia no haya enviado nada aun.
Y la aplicacion hecha en c# tiene que mostrar en una grilla en la pantalla principal los 28 PDV distintos y el ultimo backup enviado por cada uno.
Si alguno no envio nada mostrar el nombre del pdv y por lo menos todo en vacio o null.
Actualmente, y para salir del paso, a la tabla backupPDV le agregue un campo mas que indica si es el ultimo backup (1 o 0). Cada vez que se ingresa un nuevo registro
se ingresa con el valor 1 y al que tenia 1 se le pone un 0. Pero esto me esta trayendo algunos problemas.
Bueno, saludos!!
Dieguinho.:
Finalmente logre hacer lo que queria. (todavia lo estoy probando, espero que funcione bien!!)
La consulta seria la siguiente:
--- Código: Text --- SELECT MAX (BackupPDV.FechaBackup),PDV.idPDV FROM BackupPDV RIGHT JOIN PDV ON BackupPDV.idPDV = PDV.idPDV GROUP BY BackupPDV.idPDV, PDV.idPDV
Modificacion:
definitivamente lo tendria que haber probado mejor. Asi como esta la consulta funciona bien pero cuando quiero agregarle el campo Observacion me sale lo siguiente:
--- Código: Text --- La columna 'XXX_BackupPDV.Observacion' de la lista de selección no es válida, porque no está contenida en una función de agregado ni en la cláusula GROUP BY. Si lo agrego al GROUP BY me trae cualquier cosa.
Saludos!
Navegación
Ir a la versión completa