SQL - Maximo 8 numeros

 
Vista:

Maximo 8 numeros

Publicado por Angel Francisco (5 intervenciones) el 13/11/2017 19:49:51
Buenas tardes;

Trabajo con SQL Server y tengo el siguiente dilema.

Tengo una serie de telefonos que estan en la columna TELEFONOS, y luego por otra parte tengo una columna identificatoria de cada llamada realizadas con esos telefonos.

Necesitaria una query que me permitiera sacar los 8 maximos resultados de ID, DECADA TELEFONO



La query base por decirlo de alguna manera seria la siguiente:

select telefonos, ID
FROM TABLATELEFONOS
WHERE telefonos IN ('tlf1','tlf2','tlf3','tlf4','etc','etc2','muchos etc')
ORDER BY ID DESD

Esta QUERY me sacaria todas las llamadas de esos telefonos y me los ordenaria por ID


pero necesito para cada IN que es un tlfx, me saque solo los 8 maximos ID (DE CADA TELEFONO), no todos los ID de cada telefono.


Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Maximo 8 numeros

Publicado por leonardo_josue (1173 intervenciones) el 13/11/2017 20:14:31
Hola Ángel Francisco:

Al referirte a obtener los MAX ID's, puedo suponer que tu campo es numéricos y que guardas consecutivos... si es así, entonces puedes hacer uso de la función Analítica ROW_NUMBER para numerar de forma descendente estos ID's y después, con una subconsulta extraer sólo aquellos que te interesan... dale un vistazo a la documentación oficial de SQL Server

https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql

Haz la prueba y nos comentas. Si continuas con problemas, postea lo que hayas intentado hacer y con gusto te ayudamos a corregir y/o completar lo que haga falta.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Maximo 8 numeros

Publicado por Angel Francisco (5 intervenciones) el 13/11/2017 20:31:00
Buenas tardes;

Muchas gracias por tu respuesta

Estoy en esto

select ROW_NUMBER () OVER (ORDER BY ID DESC) AS 'ROW', telefonos, ID
from TABLATELEFONOS
where telefonos in ('tlf1','tlf2')

y con esto veo que me sale los resultados de esos telefonos, con el ID ordenado de mayor a menor, y que con la columna "ficticia" 'ROW', pues estan como ordenados, pero no consigo hacer que SOLO me aparezcan los 8ID´s mas altos del tlf1 y los 8 ID´s mas altos de tlf2.

Reconozco que todavia ando un poco principiante con las subquerys, ¿alguna sugerencia de como seguir?

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Maximo 8 numeros

Publicado por leonardo_josue (1173 intervenciones) el 13/11/2017 20:46:34
Hola de nuevo:

Si eres tan principiante como lo comentas, tómate un tiempo para leer cualquier manual de SQL, ya que las subconsultas son básicas y si no sabes cómo trabajan, vas a batallar bastante con consultas complejas.

una Subconsulta es básicamente volver a hacer un SELECT sobre el resultado de una consulta y se utilizan sobre todo cuando tienes necesidad de filtrar por un campo que es calculado y por lo tanto existe sólo una vez que se termina de ejecutar la consulta principal (como es el caso).

veamos este ejemplo:

supongamos que tienes esta tabla:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> select * from tabla;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    1 | one         |
|    1 | un          |
|    2 | dos         |
|    2 | two         |
|    2 | deux        |
|    3 | tres        |
|    3 | three       |
|    3 | trois       |
+------+-------------+
9 rows in set (0.00 sec)

puedes filtrar los registros que tienen un ID = 2 así:

1
2
3
4
5
6
7
8
9
mysql> select * from tabla where id = 2;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    2 | dos         |
|    2 | two         |
|    2 | deux        |
+------+-------------+
3 rows in set (0.00 sec)

Ahora, imagina que sobre este resultad, quieres filtrar sólo aquellos registros cuya descripción comienza con la letra "d", entonces haces esto:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM
    -> ( SELECT * FROm tabla WHERE id = 2) T
    -> WHERE T.descripcion LIKE 'd%';
+------+-------------+
| id   | descripcion |
+------+-------------+
|    2 | dos         |
|    2 | deux        |
+------+-------------+
2 rows in set (0.00 sec)

En otras palabras, primero se ejecuta la consulta interna (subquery) y sobre el resultado se vuelve a filtrar la información...

Tú tienes que hacer lo mismo: pon tu la consulta con ROW_COUNT() dentro de una subconsulta y sobre el resultado filtra aquellos registros que tengan un ROW menor o igual a 8.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar