nlextract / NLExtract

Convert (ETL) and visualize free Dutch geo-datasets.
https://nlextract.nl
GNU General Public License v3.0
153 stars 83 forks source link

BAGv2 verblijfsobjecten: dubbel record in actueelbestaand #343

Closed joepke closed 2 years ago

joepke commented 2 years ago

Als een verblijfsobject meerdere voorkomens heeft en de einddatum van het eerste en begindatum van het tweede voorkomen zijn gelijk aan de extract_datum(), dan worden beide voorkomens als 'actueel-bestaand' beschouwd. Het verblijfsobject komt dan 2 x voor in de tabel verblijfsobjectactueelbestaand met dezelfde identificatie.

In zo'n geval had ik had ik alleen een record voor voorkomen 2 verwacht (en voorkomen 1 op 'inactief').

Voorbeeld met identificatie = '0988010000065310' in het extract van 2022-01-08:

geodb=> SELECT gid, identificatie, voorkomenidentificatie, begindatumtijdvakgeldigheid, einddatumtijdvakgeldigheid, aanduidingrecordinactief
geodb-> FROM bag.verblijfsobjectactueelbestaand
geodb-> WHERE identificatie = '0988010000065310';
   gid   |  identificatie   | voorkomenidentificatie | begindatumtijdvakgeldigheid | einddatumtijdvakgeldigheid | aanduidingrecordinactief
---------+------------------+------------------------+-----------------------------+----------------------------+--------------------------
 8523534 | 0988010000065310 |                      1 | 2022-01-08 00:00:00+00      | 2022-01-08 00:00:00+00     | f
 8523535 | 0988010000065310 |                      2 | 2022-01-08 00:00:00+00      |                            | f
(2 rows)

Als ik in de queries duik, de filtering op eindDatumTijdvakGeldigheid >= extract_datum() in de view-definitie vervangen door eindDatumTijdvakGeldigheid > extract_datum()? Dat is ook meer in lijn met de definitie van actueel volgens de docs.

justb4 commented 2 years ago

Lijkt mij valide. @sebastic ?

sebastic commented 2 years ago

Groter dan voor de einddatum is inderdaad goed.

Dit is wat ik altijd gebruik in mijn queries:

...
       AND pg.begindatum <= extract_datum()
       AND (pg.einddatum IS NULL OR
            pg.einddatum > extract_datum())
...

Voor dit specifieke object:

bagv2=#  SELECT gid,
bagv2-#         identificatie,
bagv2-#         voorkomenidentificatie,
bagv2-#         begingeldigheid,
bagv2-#         eindgeldigheid
bagv2-#    FROM bag.verblijfsobjectactueelbestaand
bagv2-#   WHERE identificatie = '0988010000065310'
bagv2-# ;
   gid   |  identificatie   | voorkomenidentificatie | begingeldigheid | eindgeldigheid
---------+------------------+------------------------+-----------------+----------------
 7463534 | 0988010000065310 |                      1 | 2022-01-08      | 2022-01-08
 7463535 | 0988010000065310 |                      2 | 2022-01-08      |
(2 rows)

bagv2=# 
bagv2=#  SELECT gid,
bagv2-#         identificatie,
bagv2-#         voorkomenidentificatie,
bagv2-#         begingeldigheid,
bagv2-#         eindgeldigheid
bagv2-#    FROM bag.verblijfsobjectactueelbestaand
bagv2-#   WHERE identificatie = '0988010000065310'
bagv2-#     AND begingeldigheid <= extract_datum()
bagv2-#     AND (eindgeldigheid IS NULL OR
bagv2(#          eindgeldigheid > extract_datum())
bagv2-# ;
   gid   |  identificatie   | voorkomenidentificatie | begingeldigheid | eindgeldigheid 
---------+------------------+------------------------+-----------------+----------------
 7463535 | 0988010000065310 |                      2 | 2022-01-08      | 
(1 row)

Note: Mijn setup maakt geen gebruik van sql/finalize-tables.sql en gebruikt het schema zoals door ogr2ogr aangemaakt.

joepke commented 2 years ago

Oké, dank voor de reactie. Ik kan een Pull Request maken met deze wijziging (als dat handig is). De 'groter dan of gelijk aan' komt bij alle views van actueel en actueelbestaand terug in sql/create_views.sql

justb4 commented 2 years ago

@joepke graag!