Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta SQL (https://www.clubdelphi.com/foros/showthread.php?t=77835)

amerika111 29-02-2012 01:46:56

Consulta SQL
 
Hola,buen dia.. quiero realizar una consulta de una tabla la cual tiene los siguientes campos:

id,usuario,direccion, fecha

y tiene esta informacion

1,ono,xxxxx,2011-12-12
2,cali,xxxxx,2011-12-12
3,ono,iiiiiii,2012-10-12
4,cali,ooooo,2011-01-01

la consulta consiste en obtener los usuarios y la direccion mas actual, esto checandolo con la fecha
3,ono,iiiiiii,2012-10-12
2,cali,xxxxx,2011-12-12

nose si exista una funcion que lo de automatico...

Caral 29-02-2012 01:49:24

Hola
Nunca lo he hecho con fechas pero intenta asi:
Código SQL [-]
Select max(fecha) from tutabla.
Saludos

amerika111 29-02-2012 01:54:11

marca un mensaje de error

Msg 8120, Level 16, State 1, Line 1
Column tabla.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Caral 29-02-2012 01:55:51

Hola
Otra mas:
Código SQL [-]
select DISTINCT id, usuario, direccion, MAX(fecha) as Fecha from tutabla
Group by id, usuario, direccion
Saludos

amerika111 29-02-2012 02:03:00

no marca error, pero como resultado se trae todos los registros no hace caso del distinct

Caral 29-02-2012 02:09:33

Hola
Si hace caso del DISTINCT lo que pasa es que se trae la información por ID.
No se que BD usas, en algunas no acepta el Last, pruebalo:

Código SQL [-]
select DISTINCT id, usuario, direccion, LAST(fecha) as Fecha from tutabla
Group by id, usuario, direccion

O

Código SQL [-]
select  LATS(fecha) as fecha, Id, usuario, direccion from tutabla
Group by id, usuario, direccion

Saludos

amerika111 29-02-2012 02:13:30

negativo, estoy usando sql server no detecta el last.

Al González 29-02-2012 02:17:14

En Firebird sería algo así:

Código SQL [-]
Select First 1 Campos From Tabla Order By Fecha Desc

En MS SQL Server debería funcionar con "Top":

Código SQL [-]
Select Top 1 Campos From Tabla Order By Fecha Desc

Saludos positivos. :)

Edito: Ahora veo que se refería a "los" usuarios. :D :o

Caral 29-02-2012 02:18:01

Hola
Estaba con el ID, en realidad es el usuario:
Defines las diferencias entre usuarios, son estos los que se repiten No el ID.
A ver asi:

Código SQL [-]
select DISTINCT usuario, ID, direccion, MAX(fecha) as Fecha from tutabla
Group by usuario, ID, direccion

Saludos

amerika111 29-02-2012 02:27:06

Cita:

Empezado por Al González (Mensaje 426441)
En Firebird sería algo así:


Código SQL [-]Select First 1 Campos From Tabla Order By Fecha Desc



En MS SQL Server debería funcionar con "Top":


Código SQL [-]Select Top 1 Campos From Tabla Order By Fecha Desc



Saludos positivos. :)

Edito: Ahora veo que se refería a "los" usuarios. :D :o



esta consulta se trae los repetidos tambien...

amerika111 29-02-2012 02:27:50

no me sigue trayendo todos ...

amerika111 29-02-2012 02:28:32

Cita:

Empezado por Caral (Mensaje 426442)
Hola
Estaba con el ID, en realidad es el usuario:
Defines las diferencias entre usuarios, son estos los que se repiten No el ID.
A ver asi:


Código SQL [-]select DISTINCT usuario, ID, direccion, MAX(fecha) as Fecha from tutabla
Group by usuario, ID, direccion




Saludos

se sigue trayendo todos... sin importar donde coloque el usuario..

Caral 29-02-2012 02:31:08

Hola
Imposible, no me lo creo.
El distinc TIENE que enviar solo un nombre de usuario, nunca repetirlos.
Estas completamente segura ????.
Saludos

amerika111 29-02-2012 02:35:33

si segurisima, si la utilizo con el puro usuario ahi si nos los repite,

Código SQL [-]
select distinct usuario from registros




pero nada mas le agrego el campo de la fecha y se trae todos..

Al González 29-02-2012 02:40:20

Algún experto en SQL vendrá dentro de un rato, pero mientras tanto hice esta prueba (en Firebird) y funcionó:

Código SQL [-]
Select ID, IDContrato, Fecha From PeriodoFacturacion PF
  Where ID = (Select First 1 ID From PeriodoFacturacion Where IDContrato = PF.IDContrato Order By Fecha Desc)

Es probable que me equivoque (otra vez :p), pero en tu caso sería algo parecido a esto:

Código SQL [-]
Select * From MenudaTabla MT
  Where ID = (Select Top 1 ID From MenudaTabla Where Usuario = MT.Usuario Order By Fecha Desc)

A ver qué tal...

amerika111 29-02-2012 02:53:59

Hola siii, he probado con la sentencia sql y ha funcionado...

Al González 29-02-2012 03:04:40

Cita:

Empezado por amerika111 (Mensaje 426456)
Hola siii, he probado con la sentencia sql y ha funcionado...

De nada. ;)

Aunque seguramente debe haber una mejor forma de armar esa sentencia.


Carlos: Tengo entendido que Distinct aplica a toda la fila devuelta, no solamente a un campo. Es decir, evita filas idénticas (combinación de todos los campos seleccionados).

¿Gustas una cerveza o una limonada? Acá la jornada ha estado larga.

amerika111 29-02-2012 03:07:21

oo no si, muchas gracias..

Caral 29-02-2012 03:11:19

Hola
Amigo, después de esto necesito un vino.:D:D
Si, me parece que por ahí van los tiros, el distinct no esta haciendo su trabajo, por eso me encanta el DistinctRow pero solo en access lo he podido hacer funcionar.
Esta lo he probado y hace lo que tiene que hacer, pero en access:

Código SQL [-]
SELECT DistinctRow  Max(fecha),  ID, Nombre, Dirección  from Tabla 
Group by Id, nombre, dirección

En firebird he tenido que usar el Last.:)
Saludos


La franja horaria es GMT +2. Ahora son las 01:09:16.

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