Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Obtener varios registros con la fecha mas reciente

Estas en el tema de Obtener varios registros con la fecha mas reciente en el foro de Bases de Datos General en Foros del Web. Que tal compañeros, ya habia posteado esta consulta de otra manera y creo que la complique demasiado, ahora que tengo mas claras mis dudas (que ...
  #1 (permalink)  
Antiguo 03/08/2011, 10:47
 
Fecha de Ingreso: octubre-2008
Mensajes: 44
Antigüedad: 16 años, 2 meses
Puntos: 1
Obtener varios registros con la fecha mas reciente

Que tal compañeros, ya habia posteado esta consulta de otra manera y creo que la complique demasiado, ahora que tengo mas claras mis dudas (que ironia), posteo lo siguiente:
De mi tabla "Impuestos" necesito obetener los registros mas recientes, la estructura de la tabla es la siguiente:
Código Apache:
Ver original
  1. Mes        Concepto      Importe        Fecha         NumOprn         Portal
  2. Enero        I.V.A.       1,000       17/02/2010       89675         Banamex
  3. Enero        I.V.A.         900       25/03/2010       48952         HSBC
  4. Enero        I.V.A.         923       05/05/2010       89563         Banamex
  5. Febrero      I.V.A.         457       17/03/2010       23189         Bancomer
  6. Febrero      I.V.A.         508       31/07/2010       10059         HSBC
  7. Marzo        I.V.A.       2,348       17/04/2010       30597         Bancomer
  8. Marzo        I.V.A.       2,352       11/06/2010       75002         Banorte
  9. Marzo        I.V.A.       2,457       29/06/2010       90011         Banamex
y el resultado que quisiera obtener seria este:
Código Apache:
Ver original
  1. Mes        Concepto      Importe        Fecha         NumOprn         Portal
  2. Enero        I.V.A.         923       05/05/2010       89563         Banamex
  3. Febrero      I.V.A.         508       31/07/2010       10059         HSBC
  4. Marzo        I.V.A.       2,457       29/06/2010       90011         Banamex
que son los registros mas recientes, he utilizado la siguiente consulta sin embargo no me da el resultado buscado, me vuelca todos los registros sin filtración alguna

Código SQL:
Ver original
  1. Consulta = "Select Mes, Concepto, Impuesto, Max(Fecha) As MaxFecha, NumOprn, Portal From Impuestos Where Concepto = '" & _
  2.         TipoImpuesto & "' Group By Mes, Concepto, Impuesto, NumOprn, Portal"

Datos técnicos: Utilizo tablas de Access 2003 como base de datos, hago código en Visual Studio 2005, y tengo instalados Microsoft SQL Server 2005, Office 2010 y Windows XP Profesional SP3.

De antemano muchas gracias a todos los que participen.
  #2 (permalink)  
Antiguo 03/08/2011, 12:56
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Obtener varios registros con la fecha mas reciente

Fijate en este codigo esta en sql pero hace mas o menos lo que necesitas :) igual y te sirve de ayuda

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2.     (
  3.     code INT,
  4.     iencucod INT,
  5.     duracion INT
  6.     )
  7.      
  8.     INSERT INTO #temp VALUES (1,2999,1062)
  9.     INSERT INTO #temp VALUES (2,2999,610)
  10.     INSERT INTO #temp VALUES (3,2999,34)
  11.     INSERT INTO #temp VALUES (4,6170,447)
  12.     INSERT INTO #temp VALUES (5,15729,1148)
  13.     INSERT INTO #temp VALUES (6,15729,241)
  14.     INSERT INTO #temp VALUES (7,15729,53)
  15.     INSERT INTO #temp VALUES (8,38314,1029)
  16.     INSERT INTO #temp VALUES (9,38314,256)
  17.      
  18.      
  19.     SELECT code,duracion,iencucod FROM #temp WHERE
  20.     CONVERT(VARCHAR(20),duracion) + '#' + CONVERT(VARCHAR(20),iencucod)  IN
  21.     (
  22.      
  23.     SELECT CONVERT(VARCHAR(20),MAX(duracion)) + '#' + CONVERT(VARCHAR(20),iencucod) FROM #temp GROUP BY iencucod
  24.      
  25.     )

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 03/08/2011, 13:19
Avatar de vrenzo  
Fecha de Ingreso: febrero-2007
Mensajes: 289
Antigüedad: 17 años, 10 meses
Puntos: 15
Respuesta: Obtener varios registros con la fecha mas reciente

Algo asi?
Código SQL:
Ver original
  1. SELECT top 3 MAX(Fecha) AS MaxFecha, Mes, Concepto, Impuesto, NumOprn, Portal FROM Impuestos WHERE Concepto = 'I.V.A.'
  2. GROUP BY Mes, Concepto, Impuesto, NumOprn, Portal
  3. ORDER BY FECHA ASC
__________________
***
Saludos.
  #4 (permalink)  
Antiguo 03/08/2011, 14:22
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Obtener varios registros con la fecha mas reciente

Hola Daviel:

Este tipo de consultas se ha tratado muchas veces en el foro, es conveniente que antes de agregar un nuevo tema utilices la herramienta de búsqueda que tienes disponible para tratar de no repetir temas.

Tengo algunas observaciones con respecto a los códigos que proporcionan Libras y Vrenzo. En primer lugar no es recomendable utilizar sentencias IN en las consultas, ya que este operador puede afectar enormemente el performance del servidor, en su defecto hay que tratar de hacer JOIN'S o utilizar EXISTS. Igual y la consulta funciona, pero repito que no tiene el mejor desempeño.

En cuanto a la consulta del Vrenzo, creo que lo único que agrega es el TOP 3, lo que indicaría simplemente que te mostrara los tres primeros registros, no resuelve el problema de fonro

En cuanto a tu consulta no estás tan errado, pero al agrupar por todos los campos afectas el resultado final. Sólo debes obtener la máxima fecha POR MES, y en tu caso estarías trayendo las tres máximas fechas de toda la tabla.

Puedes intentar hacer algo como esto:

Código:
select T1.* from TuTabla T1 INNER JOIN 
(select Mes, MAX(Fecha) Max_Fecha from TuTabla T group by mes) T2
on T1.Mes = T2.Mes and T1.fecha = T2.Max_Fecha
Aquí hay un detalle y sería que existieran dos registros con la misma fecha máxima, ya que la consulta mostraría todos los registros que cumplan con la condición. Dale un vistazo para ver si es lo que necesitas.

Y como última recomendación... si tienes instalado SQL Server 2005 utilízalo en lugar de ACCESS, ya que este no se puede considerar como un verdadero administrador de BD...

Saludos
Leo
  #5 (permalink)  
Antiguo 03/08/2011, 16:07
 
Fecha de Ingreso: octubre-2008
Mensajes: 44
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Obtener varios registros con la fecha mas reciente

Antes que nada muchas gracias a todos por contestar (vrenzo, libras por supuesto leonardo_josue) y te prometo que he buscado en este foro y en otros mas compañero leonardo sin fortuna alguna por lo que decidi abrir el tema para que pudiese postear el orden de los errores que me han generado todas las consultas que he utilizado y la que propones ya la habia aplicado antes, ahora, he adaptado tu código leonardo a los campos reales de mi tabla y quedo asi:

Código SQL:
Ver original
  1. Consulta = "Select T1.* From ImptosCargo As T1 Inner Join(Select Mes, " & _
  2.         "Max(FechaPresent) As Max_Fecha From ImptosCargo Group By Mes) As " & _
  3.         "T2 On T1.TipoImptoCred = '" & TipoImpuesto & "' And T1.Mes = T2.Mes " & _
  4.         "And T1.FechaPresent = T2.Max_Fecha"

Sin embargo me un error, uno de tantos con otras consultas que ya he utilizado, no obstante quisiera llegar hasta el final y averiguar de una vez por todas que estoy haciendo mal, podria ser una simple letra o un signo sin embargo no alcanzo a verlo, bueno, el error es el siguiente:

"La expresión de combinación no está admitida."
  #6 (permalink)  
Antiguo 03/08/2011, 18:33
 
Fecha de Ingreso: octubre-2008
Mensajes: 44
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Obtener varios registros con la fecha mas reciente

Te comento tambien que tu consulta funciona perfectamente, sin embargo y por falta de tiempo no puse el resto de conceptos de impuestos, es decir no solo es "I.V.A.", sino que son como 6 distintos conceptos mas ("I.S.R.", "I.E.T.U", etc.), y necesito filtrarlo por tipo de impuesto (Concepto) y que de éstos me de el registro con la fecha mas reciente de cada mes, tu consulta, efectivamente me da, de todos los impuestos, la declaracion mas reciente por mes y esta excelente!, pero tambien necesito ese otro filtro (por Impuesto).

Gracias de antemano compañero y paisano.
  #7 (permalink)  
Antiguo 04/08/2011, 09:11
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Obtener varios registros con la fecha mas reciente

Hola de nuevo Daviel:

Como te comenté ACCESS no puede considerarse un verdadero motor de BD, por eso mi recomendación de utilizar SQL Server, creo que el problema con la consulta está al momento de filtrar el tipo de impuesto, lo debes hacer en el WHERE, no en el ON. Este error es exclusivo de ACCESS, cualquier DBMS "real" debería soportarlo... también está el detalle de la palabra reservada AS para los alias de los campos y tablas. Este desapareció del estándar SQL desde hace años, por lo tanto ya no es requerido sino opcional, pero esa es otra historia.

prueba poniendo tu consulta más o menos así:

Código:
Select T1.* From ImptosCargo As T1 Inner Join
(Select Mes, Max(FechaPresent) As Max_Fecha From ImptosCargo Group By Mes)
As T2 On 
T1.Mes = T2.Mes 
And T1.FechaPresent = T2.Max_Fecha
WHERE T1.TipoImptoCred = 'I.V.A.' 
Saludos
Leo.
  #8 (permalink)  
Antiguo 04/08/2011, 22:54
 
Fecha de Ingreso: octubre-2008
Mensajes: 44
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Obtener varios registros con la fecha mas reciente

Compañero y paisano leonardo_josue muchisimas gracias! quedo excelente! la consulta, PROBLEMA RESUELTO.

Se que igual y no contestas esto y esta bien no hay problema, pero tengo instalado el Microsoft SQL Server 2005 con 200 megas de espacio ocupado (según lista de programas instalados), ahora, en Programas no encuentro la opcion de crear una tabla, ya lei varios tutoriales y me hablan de un tal SQL manager studio o algo asi y no tengo esa opcion, no se si tenga instalado otra cosa y no sea el famoso SQL para hacer bases de datos, en fin, queda como comentario y como duda pues nunca he usado SQL Server y no se si realmente este instalado en mi PC pues se instaló en las muchas actualizaciones del FrameWork.

Saludos y de nuevo muchas gracias por la ayuda.
  #9 (permalink)  
Antiguo 05/08/2011, 07:27
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Obtener varios registros con la fecha mas reciente

lo que tienes instalado no es propiamente sql server sino mas bien como un complemento para el framework de visual studio, deberias de instalar sql server ya sea en su edicion express o standar :)

Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 05/08/2011, 09:11
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Obtener varios registros con la fecha mas reciente

Ya el compañero Libras te dio la respuesta, cuando instalas Visual Studio se instalan una serie de componentes de SQL Server 2005, pero que no corresponden al motor en sí. Si estás todavía a tiempo de hacer la elección de tu DBMS puedes considerar otras opciones, como MySQL, Postgress, Firebird que son gratuitas (mySQL con algunos detalles de licenciamiento) o descargar a versión EE (Express Edition) de SQL Server que también es gratuita aunque no tiene la toda la funcionalidad de una versión de paga. Checa cualquiera de estas ligas, son los sitios de descarga para cada una de los DBMS que te mencioné anteriormente, la elección te toca hacerla a tí

SQL Server
http://www.microsoft.com/sqlserver/e...s/express.aspx

MySQL
http://www.mysql.com/downloads/mysql/

Oracle
http://www.oracle.com/technetwork/da...iew/index.html

PostgreSQL
http://www.postgresql.org/download/

Firebird
http://www.firebirdsql.org/en/downloads/

Saludos
Leo.
  #11 (permalink)  
Antiguo 20/08/2011, 09:48
 
Fecha de Ingreso: octubre-2008
Mensajes: 44
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Obtener varios registros con la fecha mas reciente

Muchas gracias Leo, de hecho ya instale el SQL Manager Studio y este me permite crear tablas, descargue tambien SQL Server Standard o Express (no recuerdo cual) y bueno creo que migraré mi base de datos; aprovechando este mensage, te comento que tu consulta me filtra excelente cuando hay mas de un mes repetido, es decir, enero, enero, febrero, febrero, me da como resultado enero, febrero, pero cuando es enero, febrero, febrero, solo me pone febrero, ah y cuando mi consulta es a una tabla donde no existen meses repetidos, es decir, estan los doce meses de enero a diciembre solo me trae 3 o 4 meses, y no logro ver el patrón.

Esta es la consulta:

Código SQL:
Ver original
  1. Consulta = "Select T1.* From ImptosCargo As T1 Inner Join(Select Mes, " & _
  2. "Max(FechaPresent) As Max_Fecha From ImptosCargo Group By Mes) As " & _
  3. "T2 On T1.Mes = T2.Mes And T1.FechaPresent = T2.Max_Fecha Where " & _
  4. "T1.TipoImptoCred = '" & TipoImpuesto & "' Order By T1.Mes "
  #12 (permalink)  
Antiguo 23/08/2011, 08:12
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Obtener varios registros con la fecha mas reciente

Hola de nuevo Daviel:

No veo nada raro en la consulta, puedes postear algún ejemplo de datos donde no se esté ejecutando correctamente la consulta??? es posible que haya algún otro criterio que se tenga que considerar.

Saludos
Leo

Etiquetas: access, fecha, registros, sql, tabla, bases-de-datos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 03:06.