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

Consulta fecha mas reciente y mas datos

Estas en el tema de Consulta fecha mas reciente y mas datos en el foro de Bases de Datos General en Foros del Web. Que tal compañeros, he estado intentando obtener de una base de datos (access) varios registros donde el criterio de eliminación son campos como "Tipo", "Año" ...
  #1 (permalink)  
Antiguo 11/07/2011, 22:35
 
Fecha de Ingreso: octubre-2008
Mensajes: 44
Antigüedad: 15 años, 6 meses
Puntos: 1
Consulta fecha mas reciente y mas datos

Que tal compañeros, he estado intentando obtener de una base de datos (access) varios registros donde el criterio de eliminación son campos como "Tipo", "Año" y "Mes" sin embargo pueden existir mas de un registro donde los tres campos son iguales, ahora entonces el cuarto criterio de eliminación es el campo "fecha" donde quisiera obetener el dato con la fecha mas reciente, he utilizado la funcion Max() sin ningun exito ya que los ejemplos que he visto solo manejan un campo "x" y la fecha y son muy escuetos, en mi cunsulta aparte de los campos con los criterios de eliminación necesito los datos de varias columnas mas de la tabla para llenar una grilla, espero haberme explicado y espero sea el fro correcto para postear mi duda, sin mas pego mi código y consulta para ver si alguien pudiese hecharme una manita, de antemano muchas gracias.
Código SQL:
Ver original
  1. Sub CargarDeclaracionesCargo(ByVal vsFxAy AS AxvsFlexLib.AxvsFlexArray, ByVal TipoImpuesto AS String)
  2.         Dim ImpCn AS NEW ADODB.Connection
  3.         Dim ImpRd AS NEW ADODB.Recordset
  4.         Dim Fila, Columna AS INTEGER
  5.         Dim Importe AS DECIMAL
  6.         Dim Consulta AS String
  7.         ImpCn.OPEN("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & RutaRev & ";Persist Security Info=False;Jet OLEDB:DataBase Password=hu9rethu")
  8.         Consulta = "Select Año, Mes, TipoDeclaracion, TipoImptoCred, Impuesto, ImptoDeclAnt, Actualizacion, Recargos, Total, Compensacion, AcredIVA, " & _
  9.         "AcredIDE, PagadoSubsEmp, PagadoEfectivo, FechaPresent, NumOprn, Portal, NumFolioComp, NumOprnAnt, FechaDeclAnt, Observacion From ImptosCargo " & _
  10.         "Where TipoImptoCred = '" & TipoImpuesto & "' Group By Mes"
  11.         ImpRd.OPEN(Consulta, ImpCn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockReadOnly)
  12.         ON Error Resume NEXT
  13.         WITH vsFxAy
  14.             .ROWS = .FixedRows
  15.             While NOT ImpRd.EOF
  16.                 .ROWS = .ROWS + 1
  17.                 .set_TextMatrix(.ROWS - 1, 1, ImpRd.FIELDS("Año").VALUE)
  18.                 .set_TextMatrix(.ROWS - 1, 2, StrConv(MonthName(ImpRd.FIELDS("Mes").VALUE, FALSE), VbStrConv.ProperCase))
  19.                 .set_TextMatrix(.ROWS - 1, 3, ImpRd.FIELDS("TipoDeclaracion").VALUE)
  20.                 .set_TextMatrix(.ROWS - 1, 4, ImpRd.FIELDS("TipoImptoCred").VALUE)
  21.                 .set_TextMatrix(.ROWS - 1, 5, ImpRd.FIELDS("Impuesto").VALUE)
  22.                 .set_TextMatrix(.ROWS - 1, 6, ImpRd.FIELDS("ImptoDeclAnt").VALUE)
  23.                 .set_TextMatrix(.ROWS - 1, 7, ImpRd.FIELDS("Actualizacion").VALUE)
  24.                 .set_TextMatrix(.ROWS - 1, 8, ImpRd.FIELDS("Recargos").VALUE)
  25.                 .set_TextMatrix(.ROWS - 1, 9, ImpRd.FIELDS("Total").VALUE)
  26.                 .set_TextMatrix(.ROWS - 1, 10, ImpRd.FIELDS("Compensacion").VALUE)
  27.                 .set_TextMatrix(.ROWS - 1, 11, ImpRd.FIELDS("AcredIVA").VALUE)
  28.                 .set_TextMatrix(.ROWS - 1, 12, ImpRd.FIELDS("AcredIDE").VALUE)
  29.                 .set_TextMatrix(.ROWS - 1, 13, ImpRd.FIELDS("PagadoSubsEmp").VALUE)
  30.                 .set_TextMatrix(.ROWS - 1, 14, ImpRd.FIELDS("PagadoEfectivo").VALUE)
  31.                 .set_TextMatrix(.ROWS - 1, 15, ImpRd.FIELDS("FechaPresent").VALUE)
  32.                 .set_TextMatrix(.ROWS - 1, 16, ImpRd.FIELDS("NumOprn").VALUE)
  33.                 .set_TextMatrix(.ROWS - 1, 17, ImpRd.FIELDS("Portal").VALUE)
  34.                 .set_TextMatrix(.ROWS - 1, 18, ImpRd.FIELDS("NumFolioComp").VALUE)
  35.                 .set_TextMatrix(.ROWS - 1, 19, ImpRd.FIELDS("NumOprnAnt").VALUE)
  36.                 .set_TextMatrix(.ROWS - 1, 20, ImpRd.FIELDS("FechaDeclAnt").VALUE)
  37.                 .set_TextMatrix(.ROWS - 1, 21, ImpRd.FIELDS("Observacion").VALUE)
  38.                 CALL AjustarAltoFila(vsFxAy, .ROWS - 1, 260, 21, 60, 4000)
  39.                 ImpRd.MoveNext()
  40.             END While
  41.             .ROWS = .ROWS + 1
  42.             FOR Columna = 5 TO 14
  43.                 Importe = 0
  44.                 FOR Fila = .FixedRows TO .ROWS - 2
  45.                     Importe = Importe + .get_TextMatrix(Fila, Columna)
  46.                 NEXT Fila
  47.                 .set_TextMatrix(Fila, Columna, Importe)
  48.             NEXT Columna
  49.         END WITH
  50.         CALL AjustarColumnas(vsFxAy, 1, 18)
  51.         ImpRd.Close()
  52.         ImpCn.Close()
  53.         ImpRd = Nothing
  54.         ImpCn = Nothing
  55.         Fila = Nothing
  56.         Columna = Nothing
  57.         Importe = Nothing
  58.     END Sub
  #2 (permalink)  
Antiguo 13/07/2011, 06:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta fecha mas reciente y mas datos

Necesitas una sub consulta o una consulta auxiliar que te de la fecha maxima

Código SQL:
Ver original
  1. SELECT Tipo, Año, Mes, MAX(fecha) AS UltFecha FROM tuTabla GROUP BY Tipo, Año, Mes;
Luego si usas esta consulta como selector....

Código SQL:
Ver original
  1. SELECT T1.*
  2. FROM TuTabla AS T1
  3.           INNER JOIN (SELECT Tipo, Año, Mes, MAX(fecha) AS UltFecha
  4.                                       FROM tuTabla GROUP BY Tipo, Año, Mes) AS C1
  5.             ON T1.tipo=C1.Tipo
  6.                          AND T1.Año=C1.Año
  7.                          AND T1.Mes=C1.Mes
  8.                          AND T1.Fecha=C1.UltFecha

Obtendrás todos los campos de TuTabla pero solo el/los registros con la fecha máxima de cada Tipo,Año y Mes...

Si?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 15/07/2011, 10:16
 
Fecha de Ingreso: octubre-2008
Mensajes: 44
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Consulta fecha mas reciente y mas datos

Compañero, antes que nada gracias por responder, ya le hice y deshice, logre "adaptarlo" pa que funcionara (según yo) a mis necesidades, sin embargo me carga todos los datos (todos los "tipos") de la tabla y efectivamente por fecha mas reciente, mas no por tipo, ahora, quise adaptar el filtro por "Tipo" sin exito alguno, adjunto la consulta y espero tengas el tiempo de echarle un vistazo y decirme en que estoy mal, ya que me lanza el error "La expresión de combinación no está admitida.", esta es la consulta (ya adaptada) y desde ya! muchisimas gracias por tu tiempo y ayuda y de antemano muchas gracias tambien a los que puedan participar.

Consulta:

Código MySQL:
Ver original
  1. Sub CargarDeclaracionesCargo(ByVal vsFxAy As AxvsFlexLib.AxvsFlexArray, ByVal TipoImpuesto As String)
  2.         Dim ImpCn As New ADODB.Connection
  3.         Dim ImpRd As New ADODB.Recordset
  4.         Dim Fila, Columna As Integer
  5.         Dim Importe As Decimal
  6.         Dim Consulta As String
  7.         ImpCn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & RutaRev & ";Persist Security Info=False;Jet OLEDB:DataBase Password=hu9rethu")
  8.         Consulta = "Select T1.* From ImptosCargo As T1 Inner Join (Select Año, Mes, TipoDeclaracion, TipoImptoCred, Impuesto, ImptoDeclAnt, Actualizacion, " & _
  9.         "Recargos, Total, Compensacion, AcredIVA, AcredIDE, PagadoSubsEmp, PagadoEfectivo, Max(FechaPresent) As FechaMax, NumOprn, Portal, NumFolioComp, " & _
  10.         "NumOprnAnt, FechaDeclAnt, Observacion From ImptosCargo Group By Año, Mes, TipoDeclaracion, TipoImptoCred, Impuesto, ImptoDeclAnt, Actualizacion, " & _
  11.         "Recargos, Total, Compensacion, AcredIVA, AcredIDE, PagadoSubsEmp, PagadoEfectivo, NumOprn, Portal, NumFolioComp, NumOprnAnt, FechaDeclAnt, " & _
  12.         "Observacion) As C1 On T1.TipoImptoCred = '" & TipoImpuesto & "' And T1.Año = C1.Año And T1.Mes = C1.Mes And T1.FechaPresent = C1.FechaMax"
  13.         'Consulta = "Select Año, Mes, TipoDeclaracion, TipoImptoCred, Impuesto, ImptoDeclAnt, Actualizacion, Recargos, Total, Compensacion, AcredIVA, " & _
  14.        '"AcredIDE, PagadoSubsEmp, PagadoEfectivo, FechaPresent, NumOprn, Portal, NumFolioComp, NumOprnAnt, FechaDeclAnt, Observacion From ImptosCargo " & _
  15.         '"Where TipoImptoCred = '" & TipoImpuesto & "' Order By Mes"
  #4 (permalink)  
Antiguo 15/07/2011, 10:20
 
Fecha de Ingreso: octubre-2008
Mensajes: 44
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Consulta fecha mas reciente y mas datos

Perdón, esta es la consulta correcta, bueno, no tan correcta:

Código SQL:
Ver original
  1. Consulta = "Select T1.* From ImptosCargo As T1 Inner Join (Select Año, Mes, TipoDeclaracion, TipoImptoCred, Impuesto, ImptoDeclAnt, Actualizacion, " & _
  2.         "Recargos, Total, Compensacion, AcredIVA, AcredIDE, PagadoSubsEmp, PagadoEfectivo, Max(FechaPresent) As FechaMax, NumOprn, Portal, NumFolioComp, " & _
  3.         "NumOprnAnt, FechaDeclAnt, Observacion From ImptosCargo Group By Año, Mes, TipoDeclaracion, TipoImptoCred, Impuesto, ImptoDeclAnt, Actualizacion, " & _
  4.         "Recargos, Total, Compensacion, AcredIVA, AcredIDE, PagadoSubsEmp, PagadoEfectivo, NumOprn, Portal, NumFolioComp, NumOprnAnt, FechaDeclAnt, " & _
  5.         "Observacion) As C1 On T1.TipoImptoCred = '" & TipoImpuesto & "' And T1.Año = C1.Año And T1.Mes = C1.Mes And T1.FechaPresent = C1.FechaMax"

Etiquetas: access, fecha, 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.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:31.