MySQL dubbele waardes selecteren

Gestart doorTimkb7 reacties62 weergaven

8 berichten · pagina 1 van 1

Timkb

Lid · Topicstarter

Berichten
4.214
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ik probeer een query te maken die kijkt of een e-mailadres twee of meer keer voorkomt in een tabel, als dat het geval is dan moet enkel de laatst toegevoegde row op basis van id geselecteerd worden.

Het lukt mij om dubbelen values te vinden maar helaas niet om van deze dubbele values enkel de laatst toegevoegde row te selecteren. Ook op Google kan ik niet veel vinden over soortgelijke querys.

Met de onderstaande query kom ik al een heel eind, helaas pakt deze query de id op ascending volgorde en niet op descending. ORDER BY helpt niet.

SELECT email, id, COUNT(email) AS ecnt FROM account_activatie GROUP BY email HAVING ecnt > 1

Hopelijk kan iemand mij met dit probleem verder helpen.

Voorbeeldje van tabel

1 - jan@aap.nl - 05-02-2014
2 - jan@aap.nl - 05-04-2014
3 - jan@aap.nl - 06-02-2014
4 - tim@kb.nl - 06-02-2014
5 - rik@rikkert.nl - 06-02-2014
6 - rik@rikkert.nl - 07-02-2014

Wat de query moet selecteren:

3 - jan@aap.nl - 06-02-2014
6 - rik@rikkert.nl - 07-02-2014
0
Berichten
3.001
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Timkb schreef:
Ik probeer een query te maken die kijkt of een e-mailadres twee of meer keer voorkomt in een tabel, als dat het geval is dan moet enkel de laatst toegevoegde row op basis van id geselecteerd worden.

Het lukt mij om dubbelen values te vinden maar helaas niet om van deze dubbele values enkel de laatst toegevoegde row te selecteren. Ook op Google kan ik niet veel vinden over soortgelijke querys.

Met de onderstaande query kom ik al een heel eind, helaas pakt deze query de id op ascending volgorde en niet op descending. ORDER BY helpt niet.

SELECT email, id, COUNT(email) AS ecnt FROM account_activatie GROUP BY email HAVING ecnt > 1

Hopelijk kan iemand mij met dit probleem verder helpen.

Voorbeeldje van tabel

1 - jan@aap.nl - 05-02-2014
2 - jan@aap.nl - 05-04-2014
3 - jan@aap.nl - 06-02-2014
4 - tim@kb.nl - 06-02-2014
5 - rik@rikkert.nl - 06-02-2014
6 - rik@rikkert.nl - 07-02-2014

Wat de query moet selecteren:

3 - jan@aap.nl - 06-02-2014
6 - rik@rikkert.nl - 07-02-2014
Zal wel niet werken, maar als je aan het einde v/d query nu gewoon DESC zet?
0
Timkb

Lid · Topicstarter

Berichten
4.214
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dat werkt niet, dat had ik al geprobeerd.
0
Berichten
165
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Misschien begrijp ik je probleem verkeerd, maar heb je al gedacht aan een DISTINCT en simpele order by?

Zoiets zou dan worden:
SELECT id, DISTINCT email, datum FROM account_activatie ORDER BY datum ASC

Succes wink
0
Berichten
3.001
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Conteaster schreef:
Misschien begrijp ik je probleem verkeerd, maar heb je al gedacht aan een DISTINCT en simpele order by?

Zoiets zou dan worden:
SELECT id, DISTINCT email, datum FROM account_activatie ORDER BY datum ASC DESC
Succes wink
Hij wilt juist DESC
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Conteaster schreef:
Misschien begrijp ik je probleem verkeerd, maar heb je al gedacht aan een DISTINCT en simpele order by?

Zoiets zou dan worden:
SELECT id, DISTINCT email, datum FROM account_activatie ORDER BY datum ASC

Succes winkDat werkt niet zo; distinct moet direct na de select, en dan krijg je alle unieke combinaties van id, email en datum. Aangezien id uniek is krijg je dan dus alle resultaten.

Denk dat zoiets wel werkt:

SELECT
    (SELECT datum FROM account_activatie a2 WHERE a2.email = a1.email AND id = MAX(a1.id)) AS email,
    COUNT(a1.email) AS ecnt
FROM
    account_activatie a1
GROUP BY
    a1.email
HAVING
    ecnt > 1
volgens mij kan het niet echt zonder subquery.

Ik zou trouwens een kolom date_added of zoiets erbij voegen en daar op orderen ipv op id.
0
Timkb

Lid · Topicstarter

Berichten
4.214
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Bedankt Lennard, heb het werkend gekregen met dat voorbeeld. Niet zon fan van subquerys maar het lijkt inderdaad onmogelijk zonder.

Waarom trouwens niet op id? Een select op id lijkt mij sneller dan op datum, een datum indexeren is niet bepaald nuttig. Niet dat het verschil merkbaar is, de tabel is klein maar toch.
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Omdat de hoogste id niet per definitie het laatst ingevoegde record hoeft te zijn.
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren