Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: mysql query die verandering van waarde in tabel als resultaat heeft mogelijk?  (gelezen 1607 keer)

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
Is er een makkelijke methode om de records te vinden in mysql waarin de waarde van een bepaalde kolom veranderd?

Bijvoorbeeld voor verandering in de tweede kolom:

1   4
2   4
3   4
4   4
5   6
6   6
7   6
8   6
9   4
10  4
11  4
12  2

De query zou bij deze tabel dan de volgende records moeten teruggeven:

5   6
9   4
12  2

Of liever nog inclusief de records net voor de verandering:

4   4
5   6
8   6
9   4
11  4
12  2

De enige manier die ik op dit moment kan bedenken is om de hele tabel te kopiëren, de kolom waarden van de kolom waarvan de wijzigingen moeten worden gevonden één record naar beneden schuiven, en dan de orginele en de nieuwe tabel vergelijken op die kolom, en waar de waarden niet gelijk zijn die index is dan een wijziging.

Maar dacht ik, dat moet toch makkelijker kunnen?
« Laatst bewerkt op: 2011/03/30, 16:10:56 door Thomas de Graaff »

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
Gevonden. :) Met hulp van TonH.

Met een 'correlated' subquery kan dit.

SELECT index, variabele FROM tabel AS tabelA WHERE variabele <> (SELECT variabele FROM tabel AS tabelB WHERE tabelB.index = tabelA.index +1);

Of de gewenste in bovenstaand bericht:

SELECT index, variabele FROM tabel AS tabelA WHERE variabele <> (SELECT variabele FROM tabel AS tabelB WHERE tabelB.index = tabelA.index +1)  OR variabele <> (SELECT variabele FROM tabel AS tabelB WHERE tabelB.index = tabelA.index - 1);
« Laatst bewerkt op: 2011/03/30, 17:46:23 door Thomas de Graaff »

Offline Rachid

  • Vertaalteam
    • rachidbm
    • Mijn blog
  • Steunpunt: Nee
Ik weet uit mijn hoofd niet zo een oplossing. Maar kun je misschien nog even vertellen wat je uiteindelijk wilt bereiken? Waar ga je dit voor toepassen... Misschien wordt het dan ook nog wat duidelijker.

edit: Oh lol, dat is snel. Mooi! En nu snap ik ook beter wat je nou wilde :P
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
Sja, zo'n query is idd. wel lekker duidelijk. :D

Voor wat betreft de toepassing, ik wil datapunten in een grafiek zetten van een discrete variabele die gemeten wordt. En dan is het zinvol alleen de punten van verandering door te geven. Dat scheelt een hoop data als de tussenliggende waarden toch niet veranderen. De grafiek komt in een webpagina, jqplot. Dus zo min mogelijk datapunten doorgeven is dan wel handig. :)

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
Deze query was te veel belastend, te traag omdat voor iedere waarde een aparte select gedaan moet worden. Dat schiet niet op. Na geklooi met triggers om een extra kolom toe te voegen waarin wordt bijgehouden of een waarde gewijzigd is of niet was het uiteindelijk mogelijk om het met een query op te lossen:

SELECT tabel_A.index,tabel_A.variabele FROM tabel AS tabel_A INNER JOIN tabel AS tabel_B ON tabel_A.index = (tabel_B.index +1) WHERE tabel_A.variabele != tabel_B.variabele;

Offline Rachid

  • Vertaalteam
    • rachidbm
    • Mijn blog
  • Steunpunt: Nee
Nog iets anders. Heb je indexes op je tabel gelegd? Dit kan je query aanzienlijk versnellen, vooral bij grote datasets! Of een view aanmaken kan ook helpen.
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
Nee, daar heb ik nog niet naar gekeken. Maar de laatste query gaat razendsnel, dus voorlopig is er de behoeft nog niet. Maar zodra de boel traag wordt kom ik erop terug. ;)