Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-06-2012
AL3XZ4ND3R AL3XZ4ND3R is offline
Registrado
 
Registrado: mar 2008
Posts: 3
Poder: 0
AL3XZ4ND3R Va por buen camino
un Order by Personalizado

Tengo una [Tabla] con lo siguientes campos:

Id | Fecha | Hora | UserName | ...y mas campos.

Necesito ordenar la tabla de acuerdo al UserName que mas se repita, es decir;

puedo contar los registros de la siguiente manera:

Código SQL [-]
Select UserName, Count(*) as Contador from Tabla
group by UserName
Order by Contador DESC

... este es el orden que quiero que tenga la tabla, pero ¿cómo hago una consulta que me devuelva todos los registros de la tabla en este orden?; ya que necesito hacer uso de los demás campos de la tabla.

ejemplo:

Id|Fecha|Hora|UserName|...etc
1 x x jherrera
2 x x jherrera
3 x x jherrera
4 x x hmendez
5 x x hmendez
6 x x srodriguez

Gracias.
Responder Con Cita
  #2  
Antiguo 13-06-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Que servidor de base de datos está utilizando?
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #3  
Antiguo 13-06-2012
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 23
Caro Va por buen camino
Hola AL3XZ4ND3R, tendría que ser algo así:

Código SQL [-]
Select t1.Id, t1.Fecha, t1.Hora, t1.UserName
From Tabla t1 Left Join (Select UserName, Count(*) as Contador
                         From Tabla
                         Group By UserName) t2
     On (t1.UserName=t2.UserName)
Order by Contador Desc

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #4  
Antiguo 13-06-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola Caro,

En la consulta que pones, ¿no habría que añadir la columna contador en la lista del select exterior?

// Saludos
Responder Con Cita
  #5  
Antiguo 13-06-2012
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 23
Caro Va por buen camino
Cita:
Empezado por roman Ver Mensaje
En la consulta que pones, ¿no habría que añadir la columna contador en la lista del select exterior?
Hola Roman, Contador solo lo utilizaríamos para hacer el ordenamiento, es por eso que no sería necesario colocarlo en el Select exterior, pero si necesita ver el valor de contador, no habría problema de añadirlo.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 13-06-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 20
ElDioni Va por buen camino
Hola Caro,

porque no recorres el select que te da el orden de los usuarios y vas metiendo el user en una variable string.

Código Delphi [-]
while QueryOrden.eof=false do
  begin
    if ordenados='' then ordenados:=queryorden.fieldbyname('user').asstring
      else ordenados:=ordenados+','+queryorden.fieldbyname('user').asstring;
    QueryOrden.Next;
  end;
QueryOtro.Close;
QueryOtro.SQL.Text:='SELECT * FROM tabla ORDER BY '+ordenados;
QueryOtro.Open;

Saludos
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #7  
Antiguo 13-06-2012
AL3XZ4ND3R AL3XZ4ND3R is offline
Registrado
 
Registrado: mar 2008
Posts: 3
Poder: 0
AL3XZ4ND3R Va por buen camino
Gracias

Excelente, la respuesta de Caro es la que mas se ajusta mis necesidades.

Muchas Gracias, al final tuve que agregar parámetros para que la consulta se realice en un rango de fecha.

quedó así:

Código SQL [-]
Select t1.* from Tabla t1
Left Join (Select Username, Count(*) as Contador
                         From Tabla
                         where (Fecha between (:FechaIni) and (:FechaFin)) and Status='D'
                         Group By Username) t2
                         on (t1.Username= t2.Username)
where (Fecha between (:FechaIni) and (:FechaFin)) and Status='D'
Order by t1.AgenciaId,Contador Desc

el resultado es el que necesito y ya lo estoy usando así, pero no sé si con más registros mi consulta se haga demasiado lenta, en tal caso me pregunto si la respuesta de "ELDioni" agilice la consulta o es igual.
Responder Con Cita
  #8  
Antiguo 13-06-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.609
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Creo que se te pasó responder a la pregunta del compañero Chris (mensajes más arriba).
Cita:
Empezado por Chris Ver Mensaje
Que servidor de base de datos está utilizando?
Responder Con Cita
  #9  
Antiguo 14-06-2012
AL3XZ4ND3R AL3XZ4ND3R is offline
Registrado
 
Registrado: mar 2008
Posts: 3
Poder: 0
AL3XZ4ND3R Va por buen camino
Cita:
Empezado por Chris Ver Mensaje
Que servidor de base de datos está utilizando?
Disculpas, firebird.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Popup Personalizado Neeruu Varios 5 29-05-2011 02:33:28
Mensaje personalizado sizne OOP 2 30-06-2010 00:40:05
ClientDataSet personalizado diegofhernando OOP 6 17-04-2009 20:38:35
Relleno personalizado MAXIUM Gráficos 2 07-02-2009 18:00:55
Instalador personalizado de aplicación angara Varios 2 26-02-2008 18:35:44


La franja horaria es GMT +2. Ahora son las 01:35:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi