Hallo mensen,
Ik kom wel vaker op GoT om wat op te zoeken, maar nu is voor het eerst een moment aangebroken dat ik ergens zelf de oplossing niet van heb én niet van kan vinden. Dus hoogste tijd voor m'n eerste post
Ik heb in MySQL (v5.0.22) een tabel met een structuur die hierop lijkt:
spelers
Periodiek wordt van alle spelers het aantal gespeelde wedstrijden en het aantal verkregen punten in de tabel opgeslagen. De datum van dit "snapshot" wordt opgeslagen in het veld datum.
Als ik twee data kies, wil ik ik een overzicht waarin de gegevens (# wedstrijden & # punten) van de twee data naast elkaar staan. Je krijgt dan zoiets:
Dit kan prima met een self outer join. Ik gebruik hiervoor deze query:
Nou werkt dit prima, totdat er een speler is bijgekomen. Met andere woorden, de speler is wel aanwezig toen het nieuwere snapshot werd genomen, maar niet toen het oudere snapshot werd genomen. Dat ligt ongetwijfeld aan de JOIN clause (s1.speler = s2.speler) want s2.speler (refererend aan het oude snapshot) bestaat in dat geval niet.
Ook het omgekeerde is mogelijk, dat een speler is gestopt (wel op ouder snapshot, niet meer op nieuwer). In deze gevallen, wil ik dat de relevante waarden gewoon NULL zijn, maar dat krijg ik niet voor elkaar.
Ik hoop dat ik het een beetje duidelijk heb uitgelegd
. Ik heb de GoT search gebruikt, maar kon niks relevants vinden. Iemand een idee hoe dit kan gedaan kan worden??
Ik kom wel vaker op GoT om wat op te zoeken, maar nu is voor het eerst een moment aangebroken dat ik ergens zelf de oplossing niet van heb én niet van kan vinden. Dus hoogste tijd voor m'n eerste post
Ik heb in MySQL (v5.0.22) een tabel met een structuur die hierop lijkt:
spelers
| speler | datum | wedstrijden | punten |
| M | 1154029668 | 2 | 19 |
| Q | 1154029668 | 1 | 8 |
| M | 1154040090 | 4 | 11 |
| Q | 1154040090 | 5 | 14 |
Periodiek wordt van alle spelers het aantal gespeelde wedstrijden en het aantal verkregen punten in de tabel opgeslagen. De datum van dit "snapshot" wordt opgeslagen in het veld datum.
Als ik twee data kies, wil ik ik een overzicht waarin de gegevens (# wedstrijden & # punten) van de twee data naast elkaar staan. Je krijgt dan zoiets:
| speler | wedstijden | punten | wedstrijdenOud | puntenOud |
| M | 4 | 11 | 2 | 19 |
| Q | 5 | 14 | 1 | 9 |
Dit kan prima met een self outer join. Ik gebruik hiervoor deze query:
SQL:
1
2
3
4
5
6
7
8
9
10
| SELECT s1.speler, s1.wedstrijden, s1.punten, s2.wedstrijden AS wedstrijdenOud, s2.punten AS puntenOud FROM spelers s1 LEFT OUTER JOIN spelers s2 ON (s1.speler = s2.speler) WHERE s1.datum = 1154040090 AND s2.datum = 1154029668 |
Nou werkt dit prima, totdat er een speler is bijgekomen. Met andere woorden, de speler is wel aanwezig toen het nieuwere snapshot werd genomen, maar niet toen het oudere snapshot werd genomen. Dat ligt ongetwijfeld aan de JOIN clause (s1.speler = s2.speler) want s2.speler (refererend aan het oude snapshot) bestaat in dat geval niet.
Ook het omgekeerde is mogelijk, dat een speler is gestopt (wel op ouder snapshot, niet meer op nieuwer). In deze gevallen, wil ik dat de relevante waarden gewoon NULL zijn, maar dat krijg ik niet voor elkaar.
Ik hoop dat ik het een beetje duidelijk heb uitgelegd