vista que devuelva el mas nuevo registro de cada cliente segun determinados valores

07/04/2005 - 13:43 por .·:m·a·r·l·a:·. | Informe spam
hola a todos

tengo una tabla en la que insertamos valoraciones de los clientes segun
determinados criterios, y dado que es necesario mantener dichas valoraciones
historicamente no se sobreescriben registros

es pues los key-fields son codigo de cliente y la fecha del estudio

una de los campos importantes es la veracidad, valor de 1 a 10 si el estudio
es simplemente orientativo o perfectamente fiable (no todos lo


de esta forma quiero obtener las dos vistas siguiente:
- la mas nueva de las valoraciones de cada cliente
- la mas veraz y actual de las valoraciones para cada cliente

supongamos el caso de que a cliente "cliente_ejemplo" se le han hecho 5
valoraciones tal que la tabla muestra:

(K) cliente (K)date veracidad resto de columnas...
cliente_ejemplo 2005-01-01 07 resto de valores...
cliente_ejemplo 2005-02-01 06 resto de valores...
cliente_ejemplo 2005-03-01 07 resto de valores...
cliente_ejemplo 2005-04-01 05 resto de valores...

asi para las vistas desearia obtener:
- la mas nueva de las valoraciones de cada cliente
registro numero 4
- la mas veraz y actual de las valoraciones para cada cliente
registro numero 3

es posible de hacer esto mediante una sola vista para cada caso??
o necesito hacer vistas auxiliares para:
- combinacion cliente-fecha mas reciente
- combinacion cliente-veracidad mas alta
- combinacion vista_anterior-fecha mas actual
y usar estas vistas auxiliares para obtener el registro deseado ??

decir que en una sola vista, si hago grup_by cliente y max para date y
veracidad obtengo
cliente_ejemplo 2005-04-01 07
lo cual no corresponde a ningun registro valido

gracias por adelantado

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
07/04/2005 - 14:27 | Informe spam
Tratta con:

select *
from cliente_valoracion as a
where fecha_del_estudio = (select max(b.fecha_del_estudio) from
cliente_valoracion as b where b.cliente_id = a.cliente_id)

select *
from cliente_valoracion as a
where veracidad = (select max(b.veracidad) from cliente_valoracion as b
where b.cliente_id = a.cliente_id) and fecha_del_estudio = (select
max(b.fecha_del_estudio) from cliente_valoracion as b where b.cliente_id =
a.cliente_id and b.veracidad = (select max(b.veracidad) from
cliente_valoracion as c where c.cliente_id = a.cliente_id))

Esta solucion no ha sido probada.

AMB

".·:m·a·r·l·a:·." wrote:

hola a todos

tengo una tabla en la que insertamos valoraciones de los clientes segun
determinados criterios, y dado que es necesario mantener dichas valoraciones
historicamente no se sobreescriben registros

es pues los key-fields son codigo de cliente y la fecha del estudio

una de los campos importantes es la veracidad, valor de 1 a 10 si el estudio
es simplemente orientativo o perfectamente fiable (no todos lo


de esta forma quiero obtener las dos vistas siguiente:
- la mas nueva de las valoraciones de cada cliente
- la mas veraz y actual de las valoraciones para cada cliente

supongamos el caso de que a cliente "cliente_ejemplo" se le han hecho 5
valoraciones tal que la tabla muestra:

(K) cliente (K)date veracidad resto de columnas...
cliente_ejemplo 2005-01-01 07 resto de valores...
cliente_ejemplo 2005-02-01 06 resto de valores...
cliente_ejemplo 2005-03-01 07 resto de valores...
cliente_ejemplo 2005-04-01 05 resto de valores...

asi para las vistas desearia obtener:
- la mas nueva de las valoraciones de cada cliente
registro numero 4
- la mas veraz y actual de las valoraciones para cada cliente
registro numero 3

es posible de hacer esto mediante una sola vista para cada caso??
o necesito hacer vistas auxiliares para:
- combinacion cliente-fecha mas reciente
- combinacion cliente-veracidad mas alta
- combinacion vista_anterior-fecha mas actual
y usar estas vistas auxiliares para obtener el registro deseado ??

decir que en una sola vista, si hago grup_by cliente y max para date y
veracidad obtengo
cliente_ejemplo 2005-04-01 07
lo cual no corresponde a ningun registro valido

gracias por adelantado







Respuesta Responder a este mensaje
#2 .·:m·a·r·l·a:·.
07/04/2005 - 17:08 | Informe spam
muchas gracias, probado y parece que funciona (realmente no tenemos muchos
datos aun para probarlo, pero para el ejemplo que tenemos va bien)

ahora una cosilla mas...

ambas consultas me dan el estado ACTUAL (AHORA) de la ultima valoracion por
cliente, o de la mas veraz, perfecto, pero si quisiera ver como
historicamente fue dicha informacion a periodos de digamos cada mes ??

he pensado en las siguientes soluciones

- procedimiento que cada mes/dia ejecuta dichas vistas y las escribe en otra
tabla, asi tendria en esta nueva tabla toda la informacion historica y como
era esta en cualquier dia determinado
- necesario de programar dicho procedimiento y mantener dicha tabla
(tamaño enorme ??)
- para ofrecer la mayor flexibilidad necesario de hacer cada dia y
mantener todos en dicha tabla
- el usuario acede directamente a la tabla y el filtra el periodo
que quiera

- vista union de unas doce consultas (por ejemplo) tal que cada una esta
filtrada como (fecha < mes_actual -1), (fecha < mes_actual-2), ...
- solo se activaria cuando un usuario pide informacion
- ninguna flexibilidad, solo se ofrece lo que se expecifica
- el usuario acede directamente a la tabla y el filtra el periodo
que quiera

- procedimiento que obtenga del usuario fecha inicial, fecha final e
intervalo y que cree una tabla temporal, en la cual y mediante un bucle se
ejecuta la vista y esta se inserta en dicha tabla temporal tantas veces coo
aplicable, devolviendo al usuario los datos exactos que ha pedido
- trabajo repetitivo en el servidor para cada usuario que pide
informacion
- el usuario necesita dar los parametros adecuados, control de
errores
- tabla temporal no se almacena en el servidor sql


alguna opcion mas ??, que opcion me recomendariais ??

gracias de nuevo



"Alejandro Mesa" wrote in message
news:
Tratta con:

select *
from cliente_valoracion as a
where fecha_del_estudio = (select max(b.fecha_del_estudio) from
cliente_valoracion as b where b.cliente_id = a.cliente_id)

select *
from cliente_valoracion as a
where veracidad = (select max(b.veracidad) from cliente_valoracion as b
where b.cliente_id = a.cliente_id) and fecha_del_estudio = (select
max(b.fecha_del_estudio) from cliente_valoracion as b where b.cliente_id > a.cliente_id and b.veracidad = (select max(b.veracidad) from
cliente_valoracion as c where c.cliente_id = a.cliente_id))

Esta solucion no ha sido probada.

AMB

".·:m·a·r·l·a:·." wrote:

> hola a todos
>
> tengo una tabla en la que insertamos valoraciones de los clientes segun
> determinados criterios, y dado que es necesario mantener dichas


valoraciones
> historicamente no se sobreescriben registros
>
> es pues los key-fields son codigo de cliente y la fecha del estudio
>
> una de los campos importantes es la veracidad, valor de 1 a 10 si el


estudio
> es simplemente orientativo o perfectamente fiable (no todos lo
>
>
> de esta forma quiero obtener las dos vistas siguiente:
> - la mas nueva de las valoraciones de cada cliente
> - la mas veraz y actual de las valoraciones para cada cliente
>
> supongamos el caso de que a cliente "cliente_ejemplo" se le han hecho 5
> valoraciones tal que la tabla muestra:
>
> (K) cliente (K)date veracidad resto de columnas...
> cliente_ejemplo 2005-01-01 07 resto de valores...
> cliente_ejemplo 2005-02-01 06 resto de valores...
> cliente_ejemplo 2005-03-01 07 resto de valores...
> cliente_ejemplo 2005-04-01 05 resto de valores...
>
> asi para las vistas desearia obtener:
> - la mas nueva de las valoraciones de cada cliente
> registro numero 4
> - la mas veraz y actual de las valoraciones para cada cliente
> registro numero 3
>
> es posible de hacer esto mediante una sola vista para cada caso??
> o necesito hacer vistas auxiliares para:
> - combinacion cliente-fecha mas reciente
> - combinacion cliente-veracidad mas alta
> - combinacion vista_anterior-fecha mas actual
> y usar estas vistas auxiliares para obtener el registro deseado ??
>
> decir que en una sola vista, si hago grup_by cliente y max para date y
> veracidad obtengo
> cliente_ejemplo 2005-04-01 07
> lo cual no corresponde a ningun registro valido
>
> gracias por adelantado
>
>
>
>
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
07/04/2005 - 21:31 | Informe spam
He estado un poco ocupado, en cuanto tenga un poquito de tiempo pensare sobre
el problema.


AMB

".·:m·a·r·l·a:·." wrote:

muchas gracias, probado y parece que funciona (realmente no tenemos muchos
datos aun para probarlo, pero para el ejemplo que tenemos va bien)

ahora una cosilla mas...

ambas consultas me dan el estado ACTUAL (AHORA) de la ultima valoracion por
cliente, o de la mas veraz, perfecto, pero si quisiera ver como
historicamente fue dicha informacion a periodos de digamos cada mes ??

he pensado en las siguientes soluciones

- procedimiento que cada mes/dia ejecuta dichas vistas y las escribe en otra
tabla, asi tendria en esta nueva tabla toda la informacion historica y como
era esta en cualquier dia determinado
- necesario de programar dicho procedimiento y mantener dicha tabla
(tamaño enorme ??)
- para ofrecer la mayor flexibilidad necesario de hacer cada dia y
mantener todos en dicha tabla
- el usuario acede directamente a la tabla y el filtra el periodo
que quiera

- vista union de unas doce consultas (por ejemplo) tal que cada una esta
filtrada como (fecha < mes_actual -1), (fecha < mes_actual-2), ...
- solo se activaria cuando un usuario pide informacion
- ninguna flexibilidad, solo se ofrece lo que se expecifica
- el usuario acede directamente a la tabla y el filtra el periodo
que quiera

- procedimiento que obtenga del usuario fecha inicial, fecha final e
intervalo y que cree una tabla temporal, en la cual y mediante un bucle se
ejecuta la vista y esta se inserta en dicha tabla temporal tantas veces coo
aplicable, devolviendo al usuario los datos exactos que ha pedido
- trabajo repetitivo en el servidor para cada usuario que pide
informacion
- el usuario necesita dar los parametros adecuados, control de
errores
- tabla temporal no se almacena en el servidor sql


alguna opcion mas ??, que opcion me recomendariais ??

gracias de nuevo



"Alejandro Mesa" wrote in message
news:
> Tratta con:
>
> select *
> from cliente_valoracion as a
> where fecha_del_estudio = (select max(b.fecha_del_estudio) from
> cliente_valoracion as b where b.cliente_id = a.cliente_id)
>
> select *
> from cliente_valoracion as a
> where veracidad = (select max(b.veracidad) from cliente_valoracion as b
> where b.cliente_id = a.cliente_id) and fecha_del_estudio = (select
> max(b.fecha_del_estudio) from cliente_valoracion as b where b.cliente_id > > a.cliente_id and b.veracidad = (select max(b.veracidad) from
> cliente_valoracion as c where c.cliente_id = a.cliente_id))
>
> Esta solucion no ha sido probada.
>
> AMB
>
> ".·:m·a·r·l·a:·." wrote:
>
> > hola a todos
> >
> > tengo una tabla en la que insertamos valoraciones de los clientes segun
> > determinados criterios, y dado que es necesario mantener dichas
valoraciones
> > historicamente no se sobreescriben registros
> >
> > es pues los key-fields son codigo de cliente y la fecha del estudio
> >
> > una de los campos importantes es la veracidad, valor de 1 a 10 si el
estudio
> > es simplemente orientativo o perfectamente fiable (no todos lo
> >
> >
> > de esta forma quiero obtener las dos vistas siguiente:
> > - la mas nueva de las valoraciones de cada cliente
> > - la mas veraz y actual de las valoraciones para cada cliente
> >
> > supongamos el caso de que a cliente "cliente_ejemplo" se le han hecho 5
> > valoraciones tal que la tabla muestra:
> >
> > (K) cliente (K)date veracidad resto de columnas...
> > cliente_ejemplo 2005-01-01 07 resto de valores...
> > cliente_ejemplo 2005-02-01 06 resto de valores...
> > cliente_ejemplo 2005-03-01 07 resto de valores...
> > cliente_ejemplo 2005-04-01 05 resto de valores...
> >
> > asi para las vistas desearia obtener:
> > - la mas nueva de las valoraciones de cada cliente
> > registro numero 4
> > - la mas veraz y actual de las valoraciones para cada cliente
> > registro numero 3
> >
> > es posible de hacer esto mediante una sola vista para cada caso??
> > o necesito hacer vistas auxiliares para:
> > - combinacion cliente-fecha mas reciente
> > - combinacion cliente-veracidad mas alta
> > - combinacion vista_anterior-fecha mas actual
> > y usar estas vistas auxiliares para obtener el registro deseado ??
> >
> > decir que en una sola vista, si hago grup_by cliente y max para date y
> > veracidad obtengo
> > cliente_ejemplo 2005-04-01 07
> > lo cual no corresponde a ningun registro valido
> >
> > gracias por adelantado
> >
> >
> >
> >
> >
> >
> >



Respuesta Responder a este mensaje
#4 Manuel Etcheto
07/04/2005 - 23:04 | Informe spam
Hola marla
Se me ocurre que podrías tener una tabla auxiliar de meses-años,
(que siempre sean <= que los actuales) y hacer un JOIN contra esa tabla y
obtener los N últimos meses.

Suerte
Manuel


.·:m·a·r·l·a:·. escribió en el mensaje de noticias

muchas gracias, probado y parece que funciona (realmente no tenemos muchos
datos aun para probarlo, pero para el ejemplo que tenemos va bien)

ahora una cosilla mas...

ambas consultas me dan el estado ACTUAL (AHORA) de la ultima valoracion


por
cliente, o de la mas veraz, perfecto, pero si quisiera ver como
historicamente fue dicha informacion a periodos de digamos cada mes ??

he pensado en las siguientes soluciones

- procedimiento que cada mes/dia ejecuta dichas vistas y las escribe en


otra
tabla, asi tendria en esta nueva tabla toda la informacion historica y


como
era esta en cualquier dia determinado
- necesario de programar dicho procedimiento y mantener dicha


tabla
(tamaño enorme ??)
- para ofrecer la mayor flexibilidad necesario de hacer cada dia y
mantener todos en dicha tabla
- el usuario acede directamente a la tabla y el filtra el periodo
que quiera

- vista union de unas doce consultas (por ejemplo) tal que cada una esta
filtrada como (fecha < mes_actual -1), (fecha < mes_actual-2), ...
- solo se activaria cuando un usuario pide informacion
- ninguna flexibilidad, solo se ofrece lo que se expecifica
- el usuario acede directamente a la tabla y el filtra el periodo
que quiera

- procedimiento que obtenga del usuario fecha inicial, fecha final e
intervalo y que cree una tabla temporal, en la cual y mediante un bucle se
ejecuta la vista y esta se inserta en dicha tabla temporal tantas veces


coo
aplicable, devolviendo al usuario los datos exactos que ha pedido
- trabajo repetitivo en el servidor para cada usuario que pide
informacion
- el usuario necesita dar los parametros adecuados, control de
errores
- tabla temporal no se almacena en el servidor sql


alguna opcion mas ??, que opcion me recomendariais ??

gracias de nuevo



"Alejandro Mesa" wrote in


message
news:
> Tratta con:
>
> select *
> from cliente_valoracion as a
> where fecha_del_estudio = (select max(b.fecha_del_estudio) from
> cliente_valoracion as b where b.cliente_id = a.cliente_id)
>
> select *
> from cliente_valoracion as a
> where veracidad = (select max(b.veracidad) from cliente_valoracion as b
> where b.cliente_id = a.cliente_id) and fecha_del_estudio = (select
> max(b.fecha_del_estudio) from cliente_valoracion as b where b.cliente_id
> a.cliente_id and b.veracidad = (select max(b.veracidad) from
> cliente_valoracion as c where c.cliente_id = a.cliente_id))
>
> Esta solucion no ha sido probada.
>
> AMB
>
> ".·:m·a·r·l·a:·." wrote:
>
> > hola a todos
> >
> > tengo una tabla en la que insertamos valoraciones de los clientes


segun
> > determinados criterios, y dado que es necesario mantener dichas
valoraciones
> > historicamente no se sobreescriben registros
> >
> > es pues los key-fields son codigo de cliente y la fecha del estudio
> >
> > una de los campos importantes es la veracidad, valor de 1 a 10 si el
estudio
> > es simplemente orientativo o perfectamente fiable (no todos lo
> >
> >
> > de esta forma quiero obtener las dos vistas siguiente:
> > - la mas nueva de las valoraciones de cada cliente
> > - la mas veraz y actual de las valoraciones para cada cliente
> >
> > supongamos el caso de que a cliente "cliente_ejemplo" se le han hecho


5
> > valoraciones tal que la tabla muestra:
> >
> > (K) cliente (K)date veracidad resto de columnas...
> > cliente_ejemplo 2005-01-01 07 resto de valores...
> > cliente_ejemplo 2005-02-01 06 resto de valores...
> > cliente_ejemplo 2005-03-01 07 resto de valores...
> > cliente_ejemplo 2005-04-01 05 resto de valores...
> >
> > asi para las vistas desearia obtener:
> > - la mas nueva de las valoraciones de cada cliente
> > registro numero 4
> > - la mas veraz y actual de las valoraciones para cada cliente
> > registro numero 3
> >
> > es posible de hacer esto mediante una sola vista para cada caso??
> > o necesito hacer vistas auxiliares para:
> > - combinacion cliente-fecha mas reciente
> > - combinacion cliente-veracidad mas alta
> > - combinacion vista_anterior-fecha mas actual
> > y usar estas vistas auxiliares para obtener el registro deseado ??
> >
> > decir que en una sola vista, si hago grup_by cliente y max para date y
> > veracidad obtengo
> > cliente_ejemplo 2005-04-01 07
> > lo cual no corresponde a ningun registro valido
> >
> > gracias por adelantado
> >
> >
> >
> >
> >
> >
> >


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida