Voy a dar un repaso a unas funciones estadísticas que os pueden ser bastante útiles en vuestras queries.
Estas funciones están disponibles a partir del SQL Server 2005.
Nos basaremos en la base de datos AdventureWork y con los siguientes datos:
select FirstName, LastName, TerritoryGroup, SalesQuota FROM Sales.vSalesPerson where SalesQuota is not null
Función row_number()
Esta función nos mostrará un número correlativo según el orden que le especifiquemos.
El orden es obligatorio.
select row_number() over (order by salesquota desc) rowNumber, FirstName, LastName, TerritoryGroup, SalesQuota FROM Sales.vSalesPerson where salesquota is not null
Con esta función hemos conseguido un número de fila correlativo ordenado descendentemente por SalesQuota.
Función RANK()
Si lo que queremos es conocer la posición individual que ocupa (el ranking) en una lista , lo obtenemos de la siguiente forma:
select rank() over (order by salesquota desc) Rank, FirstName, LastName, TerritoryGroup, SalesQuota FROM Sales.vSalesPerson where salesquota is not null
Función DENSE_RANK()
Si lo que queremos es conocer la posición global que ocupa (el ranking) en una lista , lo obtenemos de la siguiente forma:
select dense_rank() over (order by salesquota desc) dense_rank, FirstName, LastName, TerritoryGroup, SalesQuota FROM Sales.vSalesPerson where salesquota is not null
Función NTILE()
Con esta función podemos dividir en grupos de N elementos un conjunto de filas.
select NTILE(4) over (order by salesquota desc) rowNumber, FirstName, LastName, TerritoryGroup, SalesQuota FROM Sales.vSalesPerson where salesquota is not null
En este ejemplo, el conjunto de filas lo hemos dividido en 4 grupos.
En el caso que el grupo no sea divisible, los primeros grupos tendrán más elementos que los últimos.
Es decir, como 14 filas no son divisibles entre 4, el grupo 1 y 2 tiene 4 elementos, y el grupo 3 y 4 tiene 3 elementos.
Particionando los resultados
Si quisiéramos agrupar estos resultados deberíamos de usar el atributo PartitionBy.
select dense_rank() over (Partition by TerritoryGroup order by salesquota desc) rowNumber, FirstName, LastName, TerritoryGroup, SalesQuota FROM Sales.vSalesPerson where salesquota is not null
En este ejemplo, podemos ver el ranking de SalesQuota por territorio.
PartitionBy también se aplica al resto de funciones de categoría.
Otro ejemplo de Partition; esta vez mostraremos el rango que ocupa cada vendedor por territorio
select rank() over (Partition by TerritoryGroup order by salesYTD desc) rango , FirstName, LastName, TerritoryGroup, salesYTD FROM Sales.vSalesPerson
Por último, y a modo de resumen, muestro un resumen con todas las funciones de las que hemos hablado, para mostrar las diferencias.
select row_number() over (order by salesquota desc) rowNumber,
rank() over (order by salesquota desc) rank,
dense_rank() over (order by salesquota desc) dense_rank,
NTILE(4) over (order by salesquota desc) ntile,
FirstName, LastName, TerritoryGroup, SalesQuota FROM Sales.vSalesPerson where salesquota is not null
Os dejo un enlace al MSDN donde podéis encontrar más información de estas funciones.
http://msdn.microsoft.com/es-es/library/ms189798.aspx
Saludos.
Blog con tutoriales y comentarios acerca de las tecnologías .Net en particular y de la informática en general.
martes, 9 de agosto de 2011
jueves, 28 de julio de 2011
Problemas con los caracteres extendidos en CVS y TortoiseCVS
Al reinstalar los equipos de desarrollo a W7 64 bits, fuimos a instalar TortoiseCVS 1.8.30 (el que teníamos en los equipos anteriores), y mi sorpresa fue que no soportaba el Explorer.exe de 64 bits.
Otra de incompatibilidades de versiones de S.O.
Instalamos la última versión de TortoiseCVS que hay en la web, la 1.12.5.
Al empezar a trabajar, vimos que los archivos que contenían carácteres especiales o extendidos (ñ, acentos, etc...) daban error al subirlos al CVS.
Después de estar buscando y rebuscando, encontré que era un tema de versiones del CVSNT.
Para saber qué versión tenéis de CVS, buscad el cvs.exe en el directorio "C:\Program Files (x86)\CVSNT" y botón derecho-propiedades-detalles.
Por línea de comando: cvs -v
El TortoiseCVS gestiona las versiones de tus ficheros a través del explorador de Windows y necesita el CVSNT para funcionar, por lo que cuando instalamos el Tortoise nos instala también el CVSNT.
La versión de CVSNT que instala el TortoiseCVS es la 2.5.05.3744.
La versión que tenemos en el servidor es la 2.05.03.2382
Para no ir cambiando el servidor de versión, decidí cambiar el cliente. Renombré (por si tenía que volvera a atrás) la carpeta "C:\Program Files (x86)\CVSNT" a "C:\Program Files (x86)\CVSNT_ORI", y copié el CVS del servidor a la carpeta "C:\Program Files (x86)\CVSNT" del cliente.
A partir de ahí, ya pudimos trabajar con los archivos sin problemas.
En esta entrada hablo también de otra problemática que ocurre al instalar el tortoise: que los iconos característicos del tortoise u otra aplicación no se muestren en el Explorer.
Saludos.
Otra de incompatibilidades de versiones de S.O.
Instalamos la última versión de TortoiseCVS que hay en la web, la 1.12.5.
Al empezar a trabajar, vimos que los archivos que contenían carácteres especiales o extendidos (ñ, acentos, etc...) daban error al subirlos al CVS.
Después de estar buscando y rebuscando, encontré que era un tema de versiones del CVSNT.
Para saber qué versión tenéis de CVS, buscad el cvs.exe en el directorio "C:\Program Files (x86)\CVSNT" y botón derecho-propiedades-detalles.
Por línea de comando: cvs -v
El TortoiseCVS gestiona las versiones de tus ficheros a través del explorador de Windows y necesita el CVSNT para funcionar, por lo que cuando instalamos el Tortoise nos instala también el CVSNT.
La versión de CVSNT que instala el TortoiseCVS es la 2.5.05.3744.
La versión que tenemos en el servidor es la 2.05.03.2382
Para no ir cambiando el servidor de versión, decidí cambiar el cliente. Renombré (por si tenía que volvera a atrás) la carpeta "C:\Program Files (x86)\CVSNT" a "C:\Program Files (x86)\CVSNT_ORI", y copié el CVS del servidor a la carpeta "C:\Program Files (x86)\CVSNT" del cliente.
A partir de ahí, ya pudimos trabajar con los archivos sin problemas.
En esta entrada hablo también de otra problemática que ocurre al instalar el tortoise: que los iconos característicos del tortoise u otra aplicación no se muestren en el Explorer.
Saludos.
viernes, 1 de julio de 2011
Añadir proveedor de búsqueda personalizado
Como dije en el anterior artículo, vamos a añadir un proveedor de búsqueda personalizado al Internet Explorer 9.
Como ejemplo, haremos un buscador de MSDN. (Documentación de la programación de Microsoft, para los que no sean del gremio).
No es el método "oficial" ni es muy correcto de hacer, pero hasta que se permita configurar manualmente los proveedores, puede valer.
Lo primero de todo, tenemos que añadir un proveedor de búsqueda "dummy" para luego reemplazar la URL por la que queramos. Preferentemente deberá ser un proveedor de búsqueda que no vayamos a usar, para evitar que al añadirlo por 2ª vez nos diga que está instalado.

Hacemos limpieza de claves, quedándonos con "DisplayName" y "URL".
Desconozco cómo sacarle el ICO pequeño a la página de MSDN, pero si se lo sacáis, guardarlo en disco y hacerle referencia en la clave FaviconURL o FaviconPath. Esto se lo dejo a los más curiosos.
Ahora, nos vamos a la página del MSDN (o la que queráis) y hacemos una búsqueda con la configuración que queramos (en Español, buscando en cierta sección, ...) . Si al buscar, la URL del navegador aparece en formato REST (como en la imagen), sustituyamos el término de búsqueda que hemos empleado por {searchTerms} y copiemos esta dirección a la clave "URL" del regedit.
Como ejemplo, haremos un buscador de MSDN. (Documentación de la programación de Microsoft, para los que no sean del gremio).
No es el método "oficial" ni es muy correcto de hacer, pero hasta que se permita configurar manualmente los proveedores, puede valer.
Lo primero de todo, tenemos que añadir un proveedor de búsqueda "dummy" para luego reemplazar la URL por la que queramos. Preferentemente deberá ser un proveedor de búsqueda que no vayamos a usar, para evitar que al añadirlo por 2ª vez nos diga que está instalado.

En nuestro caso, añadimos el proveedor de búsqueda del eBay.
Ahora nos vamos al RegEdit.exe y localizamos el proveedor de EBay que hemos instalado.
Por supuesto, sobra decir que debemos de tener mucha precaución al manipular el registro de Windows.
La clave donde buscar las búsquedas es:
HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ SearchScopes
Hacemos limpieza de claves, quedándonos con "DisplayName" y "URL".
Desconozco cómo sacarle el ICO pequeño a la página de MSDN, pero si se lo sacáis, guardarlo en disco y hacerle referencia en la clave FaviconURL o FaviconPath. Esto se lo dejo a los más curiosos.
Ahora, nos vamos a la página del MSDN (o la que queráis) y hacemos una búsqueda con la configuración que queramos (en Español, buscando en cierta sección, ...) . Si al buscar, la URL del navegador aparece en formato REST (como en la imagen), sustituyamos el término de búsqueda que hemos empleado por {searchTerms} y copiemos esta dirección a la clave "URL" del regedit.
Con esta operación, ya tenemos un buscador personalizado.
¿Cómo eliminar el proveedor de búsqueda personalizado?
Por si necesitamos desinstalar algún proveedor de búsqueda, aquí os dejo unas capturas de pantalla.
Para los más despistados, decir que el menú "Herramientas" sale al apretar la tecla "alt".
Saludos.
Suscribirse a:
Entradas (Atom)















