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

[0] Índice de Mensajes

Ir a la versión completa