Hace unos días me solicitaron hacer una selección de clientes lógica, pero algo complicada. En una misma tabla tenía varias fechas/horas asociadas a un mismo registro y necesitaba hacer una selección aleatoria con la última fecha de ese registro. Cuando empecé la consulta me pareció fácil, dado que ya había realizado alguna que otra consulta de este tipo, pero en SAS haciendo un PROC SQL. Cuando empecé la programación de la consulta, descubrí que no funcionaba de la misma manera, a pesar de que en SAS llamaba a un procedimiento SQL, finalmente pude realizar dicha consulta con el siguiente ejemplo:
SELECT top 500 *
FROM
( SELECT indice, MAX(FECHA) as maxdate
FROM TABLA_LLAMADAS
WHERE CAMPAÑA= 'TEST'
GROUP by INDICE) as z inner join TABLA_LLAMADAS as a
on a.Indice = z.indice and maxdate= a.FECHA
left join TABLA_CLIENTES1 as b
on a.INDICE= b.INDICE
left join TABLA_DESCRIPCION as c
on c.INDICE= a.INDICE
left join TABLA_CLIENTES2 as d
on d.INDICE= b.INDICE
WHERE FECHA >= '2013-05-14 08:00:00.000' and FirstCampaign = 'TEST'
and STATUS = '1' and DETAIL = '1'
order by NEWID( )
Lo principal de esta consulta, es que se la tabla principal, se debe unir con una selección sobre la tabla inicial con el máximo que estamos buscando, con lo que así obtendremos la selección completa con todos los datos que necesitamos con solo los datos de la llamada con la última fecha (marcado en el gris)
Por otro lado, para poder hacer una consulta de x registros, en este caso 500 de forma aleatoria, simplemente hacemos un order by e invocamos la función newID( ).
Espero que estas indicaciones hayan sido útiles a quien lo haya visto.
Un saludo!

No hay comentarios:
Publicar un comentario