[MySQL] Ontdubbelen op een aantal velden

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • TygeR
  • Registratie: Oktober 2000
  • Laatst online: 06-02 16:23
Ik heb een database gevuld met gegevens van personen wiens toegangskaarten gescand zijn, hierin staat de naam van de persoon de bedrijfsnaam en de timestamp waarop ze gescand zijn en nog wat extra gegevens.
Wat is wil is het volgende uitdraaien is het volgende:

SELECT timestamp,naam,bedrijfsnaam FROM Bezoekers;

Nu wil ik echter deze lijst ontdubbelen want er zijn mensen soms per ongelijk meerder malen gescand, nu kan dat heel makkelijk door het volgende te doen:

SELECT DISTINCT naam,bedrijfsnaam FROM Bezoekers;

Alleen op deze manier mis ik de timestamp en die wil ik er wel bij hebben (de eerste voorkomende)

SELECT DISTINCT timestamp,naam,bedrijfsnaam FROM Bezoekers;

Levert natuurlijk ook niet het gewenste resultaat omdat de timestamp voor elke record uniek is.
Ik ben op zoek naar een query die geen dubbele naam/bedrijfsnaam/(en nog wat andere velden) combinatie geeft, maar wel de eerst voorkomende timestamp bij het record opslaat.

vb. uit deze set velden:
2008/11/24 17:01:46; henk van der Put; Swegers b.v.
2008/11/24 17:01:47; henk van der Put; Swegers b.v.
2008/11/24 17:02:14; Hans Verstegen; Verstegen b.v.

wil ik de volgende recordset halen:
2008/11/24 17:01:46; henk van der Put; Swegers b.v.
2008/11/24 17:02:14; Hans Verstegen; Verstegen b.v.

Ik hoop dat deze uitleg een beetje duidelijk is en dat jullie me hierbij kunnen helpen.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Kijk eens naar GROUP BY en min(...).

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
Misschien gebruiken maken van GROUP BY

Acties:
  • 0 Henk 'm!

  • TygeR
  • Registratie: Oktober 2000
  • Laatst online: 06-02 16:23
Bedankt voor deze hulp

SELECT timestamp,naam,bedrijfsnaam FROM bezoekers GROUP BY naam,bedrijfsnaam;

Geeft het gewenste resultaat!
Arg zo simpel dan toch nog, ben er al ruim 2 uur naar op zoek 8)7

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

TygeR schreef op maandag 24 november 2008 @ 16:40:
Bedankt voor deze hulp

SELECT timestamp,naam,bedrijfsnaam FROM bezoekers GROUP BY naam,bedrijfsnaam;

Geeft het gewenste resultaat!
Arg zo simpel dan toch nog, ben er al ruim 2 uur naar op zoek 8)7
Dit garandeert niet dat het de kleinste timestamp retourneert. Kijk nog eens wat curry zit te hinten.

Acties:
  • 0 Henk 'm!

  • TygeR
  • Registratie: Oktober 2000
  • Laatst online: 06-02 16:23
BalusC schreef op maandag 24 november 2008 @ 16:48:
[...]

Dit garandeert niet dat het de kleinste timestamp retourneert. Kijk nog eens wat curry zit te hinten.
Op zich is dit ook niet zo van belang voor de huidige toepassing, en omdat alle data gronologisch geordend is zal in dit geval als gevolg daarvan de kleinste timestamp gekozen worden. Wel bedankt voor de extra informatie en heb zeker ook nog even de werking van min( ) nagekeken.

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Je mag nooit uitgaan dat de volgorde van de data dat wordt geretourneerd in een onspecifieke SELECT gelijk is aan de volgorde van de INSERT's. Dit kan zelfs database-configuratie of -versie specifiek zijn.

[ Voor 5% gewijzigd door BalusC op 24-11-2008 20:48 ]


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

TygeR schreef op maandag 24 november 2008 @ 19:42:
[...]


Op zich is dit ook niet zo van belang voor de huidige toepassing, en omdat alle data gronologisch geordend is zal in dit geval als gevolg daarvan de kleinste timestamp gekozen worden. Wel bedankt voor de extra informatie en heb zeker ook nog even de werking van min( ) nagekeken.
MySQL is de enige database ter wereld die de query toestaat die je daar geeft, omdat het ook de enige DB is die het op dat moment okee vindt om een random timestamp terug te geven. De volgorde is arbitrair zoals BalusC correct aangeeft, onvoorspelbaar door de gevolgen van page splits en merges. Je dient dus met een aggregate functie zoals min of max aan te geven welke 'weggegroepeerde' timestamp hij moet selecteren.

Zie ook Programming FAQ - SQL, alhoewel die een betere layout had toen ik hem lang geleden schreef 8)7

[ Voor 11% gewijzigd door curry684 op 24-11-2008 21:42 ]

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
TygeR schreef op maandag 24 november 2008 @ 19:42:
[...]


Op zich is dit ook niet zo van belang voor de huidige toepassing, en omdat alle data gronologisch geordend is zal in dit geval als gevolg daarvan de kleinste timestamp gekozen worden. Wel bedankt voor de extra informatie en heb zeker ook nog even de werking van min( ) nagekeken.
Simplistische vraag : Wat gebeurt er als een interne medewerker een timestamp verandert naar een eerder tijdstip?
Imho, disaster waiting to happen. Ik zou niet alleen kijken naar de werking van min, maar het ook toepassen. Ooit komt er een tijd dat iemand iets doet wat de chronologische volgorde aanpast en dan ben jij het haasje.
Pagina: 1