Hola, quisiera ver si me pueden ayudar con esto, tengo 2 tablas:
Una para guardar registros de documentos de proveedor (doc_prv):
DOC_PRV
- id_doc_prv , numeric(18,0) , pk, (vale hongo como pk)
- rut_prv , numeric(10,0) , (fk)
- cdg_doc_prv , varchar(50) -- un codigo que indica que tipo de doc es
- fol_doc_prv , varchar(50) -- el numero de folio del doc
- est_doc_prv , bit -- booleano según doc vigente o no vigente
- fec_upd_doc_prv , datetime -- la ultima fecha en que se actualizó ese doc
Y otra tabla de historico (hst_doc_prv) para cuando se cargue un registro en doc_prv el cual ya existe, el anterior pase al historial. Dicho de otro modo, sirve para mantener solo el doc mas actual en doc_prv y el anterior en hst_doc_prv, la estructura de hst_doc_prv es idéntica a doc_prv salvo por que tiene su propia llave, igual lo pongo:
HST_DOC_PRV
- id_hst_doc_prv , numeric(18,0) , pk
- id_doc_prv , numeric(18,0) , fk
- rut_prv , numeric(10,0) , (fk)
- cdg_doc_prv , varchar(50) -- un codigo que indica que tipo de doc es
- fol_doc_prv , varchar(50) -- el numero de folio del doc
- est_doc_prv , bit -- booleano según doc vigente o no vigente
- fec_upd_doc_prv , datetime -- la ultima fecha en que se actualizó ese doc
A su vez, en la practica acá a un doc lo identifican como único por (rut_prv, cdg_doc_prv y fol_doc_prv) para que lo tengan presente
Por otra parte, lo que no está funcionando en este sistema es la funcionalidad de "mantener solo el doc mas actual en doc_prv y el anterior en hst_doc_prv",, lo que sucede actualmente es que guarda N docs en doc_prv de un mismo documento (incluso los que deberían estar en el histórico) y N docs en hst_doc_prv también de un mismo documento (no me pregunten porque yo solo llegue hace poco acá).
Bien, mi pasos a seguir para arreglar esto son:
- Eliminar todos los registros de hst_doc_prv actuales (no problem estoy autorizado y ya lo hice)
- Crear una query para enviar cada "registro anterior" de cada documento en doc_prv hacia la tabla hst_doc_prv
- Eliminar los registros de doc_prv que esten no vigentes (est_doc_prv=0), esto es para mover los regsitros que ya fueron enviados al historico, pero es el punto anterior el que me tiene partiendome el mate.
por ejemplo tengo estos registros en doc_prv:
rut_prv, cdg_doc_prv, fol_doc_prv, fec_upd_doc_prv
3158355, 12, 39672, 0, 2011-06-07
3158355, 12, 39672, 0, 2011-06-07
3158355, 12, 39672, 0, 2011-06-12
3158355, 12, 39672, 1, 2011-06-14
4667112, 50, 40566, 0, 2010-01-12
...
...
etc
como ven, los 4 representan un mismo documento, pero ingresado en distintos momentos, y eso sucede con cada documento. Ya se como obtener el ultimo doc en ser ingresado mediante la función MAX(fecha) y haciendo un group by en esa tabla, pero lo que no se es como obtener el registro anterior, en el ejemplo me gustaría obtener mediante una query el que tiene por fecha de update 2011-06-12 y hacer eso con cada documento. Y eso considerando que en la práctica los docs se identifican por rut_prv, cdg_doc_prv, fol_doc_prv como mencioné anteriormente.
Espero haber sido claro sino me preguntan nomas, de antemano gracias y mis respetos.