[SQLite] Ongewenst data uit DB filteren

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Perphide
  • Registratie: Mei 2002
  • Laatst online: 21-04-2024
Ik heb een setje SQLite databases waar ik een heleboel records uit wil verwijderen. De hoeveelheid is te groot om met de hand te verwijderen. Helaas kom ik er zelf nog niet uit om de juiste data te selecteren. Kan iemand mij op weg helpen wellicht?

Het gaat om circa 30 variabelen die elke minuut gelogd zijn, nu is er echter 1 variabele per ongeluk elke seconde gelogd. Dit levert dus een vervuilde/gigantische database op. Dit laatste wens ik op te schonen.
...

Ik heb het programma 'DB browser for SQLite' op een linux machine staan. Daarmee kan ik de data keurig inzien en records maken en verwijderen.
...

Ik heb geprobeerd om een select te maken met 'distinct' maar dat levert niet het gewenst resultaat op, en de functie 'lag' lijkt niet te bestaan of ik voer deze verkeerd uit.
...

Misschien is duidelijker aan de hand van een voorbeeld om uit te leggen wat er verwijderd moet worden uit de data, ik heb daarom de eerste 94 records in pastebin geplaatst: https://pastebin.com/Qqs8BgVp
Wat je hier ziet is dat de variable A77KB3A_F2 heel vaak voorkomt, de eerste 4 records zijn bijvoorbeeld overbodig, alleen de records die direct volgen op variable A79KB3A (record 34) zijn de juisten, dit kan je zien omdat de tijdstippen indentiek zijn. record 34 en 35 hebben hetzelfde tijdstip. De 59 daarop volgende records zijn dus elke seconde gemaakt en overbodig.

Is er iemand die hier inzicht in heeft en mij op weg kan helpen?

Beste antwoord (via Perphide op 04-08-2020 20:38)


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Perphide schreef op dinsdag 4 augustus 2020 @ 19:08:
[...]


Ja, absoluut. Alle data die bewaard moet blijven bevat ook 100% zeker weten de reeks waarin eerst A79KB3A voorkomt en direct daarop volgend een record met A77KB3A_F2 op hetzelfde tijdstip.

Om die reden wilde ik met de functie 'lag' vergelijken / sorteren maar dit resulteerde bij mij in ongeldige instructies. Is er wellicht een betere manier/correcte manier?
Je kunt alle records verwijderen waarvoor geen A77KB3A_F2 record met hetzelfde tijdstip bestaat: https://www.w3resource.co...elete-with-subqueries.php

Alle reacties


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Is er voor elk record dat je wilt behouden een A79KB3A record met hetzelfde tijdstip?

Acties:
  • 0 Henk 'm!

  • Perphide
  • Registratie: Mei 2002
  • Laatst online: 21-04-2024
GlowMouse schreef op dinsdag 4 augustus 2020 @ 18:36:
Is er voor elk record dat je wilt behouden een A79KB3A record met hetzelfde tijdstip?
Ja, absoluut. Alle data die bewaard moet blijven bevat ook 100% zeker weten de reeks waarin eerst A79KB3A voorkomt en direct daarop volgend een record met A77KB3A_F2 op hetzelfde tijdstip.

Om die reden wilde ik met de functie 'lag' vergelijken / sorteren maar dit resulteerde bij mij in ongeldige instructies. Is er wellicht een betere manier/correcte manier?

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Perphide schreef op dinsdag 4 augustus 2020 @ 19:08:
[...]


Ja, absoluut. Alle data die bewaard moet blijven bevat ook 100% zeker weten de reeks waarin eerst A79KB3A voorkomt en direct daarop volgend een record met A77KB3A_F2 op hetzelfde tijdstip.

Om die reden wilde ik met de functie 'lag' vergelijken / sorteren maar dit resulteerde bij mij in ongeldige instructies. Is er wellicht een betere manier/correcte manier?
Je kunt alle records verwijderen waarvoor geen A77KB3A_F2 record met hetzelfde tijdstip bestaat: https://www.w3resource.co...elete-with-subqueries.php

Acties:
  • 0 Henk 'm!

  • Perphide
  • Registratie: Mei 2002
  • Laatst online: 21-04-2024
Dankjewel GlowMouse ik ga er mee aan de slag, ik zal het resultaat laten weten. Bedankt voor je hulp!

Edit:
Met dank aan je hulp heb ik dit kunnen vinden/uitvoeren:

code:
1
2
3
select * from logdata where time_ms in (
    select time_ms from logdata group by time_ms having count(*) > 1
);


Daarmee lijkt alles wat een unieke timestamp heeft gefilterd te zijn, aangezien alle ongewenste data maar 1x voorkomt heeft dit een unieke timestamp 'time_ms'

Nu de vervolg stap: deze query moet over 1450 databases heen, dus nu hoop ik ze allemaal tegelijk te kunnen openen of ze eerst samenvoegen tot 1 groot bestand en daarna alsnog deze query uit te voeren.

[ Voor 73% gewijzigd door Perphide op 04-08-2020 20:42 ]