Toon posts:

[SQL] dubbele patienten zoeken

Pagina: 1
Acties:
  • 834 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo ik heb een vraagje:

Ik heb een SQL database en die heet "MCS_curacao"
daarin staat dan weer de tabel "patient"
Die is weer onderverdeeld in nummer, naam, voornaam (nog wel veel meer maar dat is niet van toepassing.)

Het nummer is het unieke patient nummer, waar ook normaal gesproken op gezocht wordt.

Toch staan er een aantal patiënten dubbel in de database, als iemand een patient niet kan vinden maken ze die gewoon opnieuw aan, terwijl diegene al een patientnummer heeft. En doorgeven aan mij dat ze die patiënt weer opnieuw hebben ingevoerd doen ze niet. Dus nu staan er aardig wat mensen 2x in. En 16000 patiënten op alfabet langs gaan duurt eeuwen.

Dan heb je bijv.
tabel patient:

NummerNaamVoornaam
341ZwartHenk
7843ZwartHenk


Maar nu wil ik dus alle patiënten uit de database vinden die er 2x instaan. Ik weet dus geen namen en nummers. Ik moet er nog achter komen WIE er 2x instaan zodat ik er 1 kan wissen.

Ik weet niet of t mogelijk is, maar het lijkt mij dat er wel vaker zoiets voorkomt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:18
code:
1
select distinct naam, voornaam from patient.

https://fgheysels.github.io/


  • Obliterator
  • Registratie: November 2000
  • Laatst online: 11-11 23:27
Dan heb je de dubbele juist niet....

Verwijderd

Topicstarter
nee

Want nu selecteer je elke naam gewoon 1 keer.
Dan weet je nog niet wie er wel 2x instaan.

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12 21:27
SELECT COUNT(naam) AS aantalnaam FROM MCS_curacao GROUP BY naam

?

We are shaping the future


  • brokenp
  • Registratie: December 2001
  • Laatst online: 12:40
Zoiets (niet getest)
code:
1
2
3
SELECT p1.naam, p1.voornaam 
FROM patient as p1 patient as p2 
WHERE (NOT p1.nr=p2.nr AND p1.naam=p2.naam AND p1.voornaam=p2.voornaam )

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

denk dat je ongeveer deze kant op moet.. kweet alleen niet of het toegestaan is in sql
SQL:
1
2
3
4
5
6
SELECT tabel1.naam
FROM patient as tabel1
INNER JOIN patient as tabel2 ON
tabel1.naam = tabel2.naam 
WHERE
tabel1.nummer <> tabel2.nummer

[ Voor 12% gewijzigd door dip op 14-11-2005 17:52 ]

It's scientifically known, that base improves the tase of cheezes!


  • Joni
  • Registratie: Oktober 2002
  • Niet online
Misschien een beetje offtopic, maar zou je niet ook de geboortedatum erbij betrekken? Het kan zo zijn dat iemand dezelfde voornaam en achternaam heeft, niet voor niets wordt in het ziekenhuis zeer regelmatig om je geboortedatum gevraagd. :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:18
Obliterator schreef op maandag 14 november 2005 @ 17:32:
Dan heb je de dubbele juist niet....
Eh, idd ja.... sorry |:(

Je moet dus zoiets doen zoals Alex al zegt, selecteren op naam, voornaam (en idd evt op geboortedatum), een count erbij pakken en filteren op diegene die een count hebben die groter is dan 1.

code:
1
2
3
4
select count(1), naam, voornaam, gebdatum
from tabel
group by naam, voornaam, gebdatum
having count(1) > 1

[ Voor 15% gewijzigd door whoami op 14-11-2005 17:44 ]

https://fgheysels.github.io/


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Misschien is het ook niet verkeerd, om je database en / of tabellen te normaliseren, om dit soort dingen te voorkomen.
Ik zou dan voornaam en achternaam (uitgaande van MySQL) een varchar(255) maken met als extra eigenschap dat deze 'UNIQUE' moeten zijn.

Geeft ook een aantal voordelen met zich mee:
  • Geen dubbele patienten
  • Foutmelding indien dubbele patient toegevoegt is.
  • Medewerker hoeft nooit meer door te geven dat een reeds bestaande patient er is, wat jou tijd scheelt en de medewerker gewoon beter moet zoeken... ;)

[ Voor 5% gewijzigd door CH4OS op 14-11-2005 17:45 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:18
GJ-tje schreef op maandag 14 november 2005 @ 17:44:
Misschien is het ook niet verkeerd, om je database en / of tabellen te normaliseren.
Ik zou dan voornaam en achternaam (uitgaande van MySQL) een varchar(255) maken met als extra eigenschap dat deze 'UNIQUE' moeten zijn.
En wat als je dan 2 patienten hebt die dezelfde naam hebben (zowel voornaam als familienaam)?

[ Voor 4% gewijzigd door whoami op 14-11-2005 17:45 ]

https://fgheysels.github.io/


  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

En wat als je dan 2 patienten hebt die dezelfde naam hebben (zowel voornaam als familienaam)?
damn wat ben jij snel :)

It's scientifically known, that base improves the tase of cheezes!


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12 21:27
Geboortedatum en adres erbij betrekken?

whoami :*

[ Voor 15% gewijzigd door Alex) op 14-11-2005 17:47 ]

We are shaping the future


  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 22-12 19:39

Hu9o

Schokkend

select n1.t1, n2.t2, v1.t1, v2.t2, num1.t1, num2.t2
from tabel t1, tabel t2
where n1 = n2 and v1 = v2 and not(num1 = num2)


Dan krijg je een lijst met dubbele namen ( deze lijst bevat dus alle mensen die dubbel zijn 2 keer).

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

Alex schreef op maandag 14 november 2005 @ 17:46:
Geboortedatum en adres erbij betrekken?
Dan ga je echt heel erg omslachtig doen. Het kan nooit de bedoeling zijn dat er dubbele patienten in je systeem staan. Als dit gebeurt heeft dit niets te maken met de gebruiker van het systeem, maar het systeem zelf, welke de gebruiker niet goed genoeg helpt bij het zoeken naar bestaande klanten.

It's scientifically known, that base improves the tase of cheezes!


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

whoami schreef op maandag 14 november 2005 @ 17:44:
[...]

En wat als je dan 2 patienten hebt die dezelfde naam hebben (zowel voornaam als familienaam)?
Oeps, niet aan gedacht, maar dan kan je toch op postcode / NAW* gegevens controleren? Want dan weet je zeker dat je een unique patient hebt... ;)

Je checkt dan dus op:
  • Voornaam
  • Achternaam
  • Adres
  • Postcode
  • Plaats
* Naam, Adres, Woonplaats
dip schreef op maandag 14 november 2005 @ 17:48:
Dan ga je echt heel erg omslachtig doen. Het kan nooit de bedoeling zijn dat er dubbele patienten in je systeem staan. Als dit gebeurt heeft dit niets te maken met de gebruiker van het systeem, maar het systeem zelf, welke de gebruiker niet goed genoeg helpt bij het zoeken naar bestaande klanten.
Als je geen unieke rijen in je tabel hebt, heb je redundantie, wat ook niet de bedoeling is. Je kan dan bijv. 2x dezelfde klant hebben, die op 2 adressen woont en ga dan maar eens raden naar welke je de factuur moet sturen... ;)

[ Voor 39% gewijzigd door CH4OS op 14-11-2005 17:51 ]


Verwijderd

Topicstarter
offtopic:
ja dat klopt.
Maar er worden dus vaak fouten gemaakt met de geboortedatum.
Iemand die op 11 februari is geboren wordt soms ingevoerd als
02-11 en soms 11-02

Als ze dan op geboortedatum gaan zoeken naar een patiënt vinden ze dus niet de goede en voeren ze de patiënt opnieuw in.

Hou er rekening mee dat ik op de antillen zit, de mensen kijken echt niet verder dan hun neus lang is.


Bedankt alvast ik ga ff testen...

  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 05-04 18:06

[ash]

Cookies :9

Zelf heb ik op dit moment niet de mogelijkheid om dit te testen, maar onderstaande SQL statement geeft volgens mij het gewenste resultaat.
SQL:
1
2
3
4
SELECT naam, voornaam 
FROM patient 
GROUP BY naam,voornaam 
HAVING COUNT(nummer) > 1

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

ja GJ-tje, maar als je GUI daar geen ondersteuning bij biedt, en je een spelfout oid maakt herkent kan het systeem geen patient vinden met die gegevens en zal een nieuwe patient toegevoegd worden

It's scientifically known, that base improves the tase of cheezes!


  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

where count > 1

zoeist .. o te laat

[ Voor 51% gewijzigd door Fish op 14-11-2005 17:51 ]

Iperf


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

dip schreef op maandag 14 november 2005 @ 17:50:
ja GJ-tje, maar als je GUI daar geen ondersteuning bij biedt, en je een spelfout oid maakt herkent kan het systeem geen patient vinden met die gegevens en zal een nieuwe patient toegevoegd worden
Dan kan je de gebruiker toch eerst laten controleren of de gegevens correct zijn ingevoerd? Zijn ze dat niet, dan moet je de mogelijkheid aanbieden om het aan te passen.
Verwijderd schreef op maandag 14 november 2005 @ 17:49:
offtopic:
ja dat klopt.
Maar er worden dus vaak fouten gemaakt met de geboortedatum.
Iemand die op 11 februari is geboren wordt soms ingevoerd als
02-11 en soms 11-02

Als ze dan op geboortedatum gaan zoeken naar een patiënt vinden ze dus niet de goede en voeren ze de patiënt opnieuw in.

Hou er rekening mee dat ik op de antillen zit, de mensen kijken echt niet verder dan hun neus lang is.
Dan kan je eventueel ook nog de record van de patient aanpassen in plek van een compleet nieuwe te maken... ;)

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

GJ-tje schreef op maandag 14 november 2005 @ 17:49:
Als je geen unieke rijen in je tabel hebt, heb je redundantie, wat ook niet de bedoeling is. Je kan dan bijv. 2x dezelfde klant hebben, die op 2 adressen woont en ga dan maar eens raden naar welke je de factuur moet sturen... ;)
redundantie moet je voorkomen, niet genezen B)

It's scientifically known, that base improves the tase of cheezes!


  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

GJ-tje schreef op maandag 14 november 2005 @ 17:49:
[...]
Oeps, niet aan gedacht, maar dan kan je toch op postcode / NAW* gegevens controleren? Want dan weet je zeker dat je een unique patient hebt... ;)

Je checkt dan dus op:
  • Voornaam
  • Achternaam
  • Adres
  • Postcode
  • Plaats
* Naam, Adres, Woonplaats
Ik ben in bestanden wel eens namen tegen gekomen die echt identiek zijn op bovengenoemde lijst, en toch niet de zelfde persoon zijn.

Checken op: Achternaam / Voornaam / Geboorte Datum

offtopic: Ey Pantheon :P

Ey!! Macarena \o/


  • Dancing_Animal
  • Registratie: September 2000
  • Laatst online: 12-12 19:36
Kijk ook uit met tweelingen he, die schijnen nogal vaak dezelfde geboortedatum te hebben en als ze nog wat jonger zijn vaak ook hetzelfde adres. Eigenlijk moet je een uniek patientnummer hebben.

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

dip schreef op maandag 14 november 2005 @ 17:54:
[...]

redundantie moet je voorkomen, niet genezen B)
Voorkomen gaat alleen zo lastig als het er al is, vandaar dat ik zei van dat de tabel aangepast dient te worden... ;) Maar dan krijg je idd wat whoami zegt... ;)

Maar er moet toch een mogelijkheid zijn om redudantie te voorkomen? Misschien een koppeltabel of zo? :? Of is dat onzin?

Verwijderd

Topicstarter
dip schreef op maandag 14 november 2005 @ 17:50:
ja GJ-tje, maar als je GUI daar geen ondersteuning bij biedt, en je een spelfout oid maakt herkent kan het systeem geen patient vinden met die gegevens en zal een nieuwe patient toegevoegd worden
Ze kunnen bij ons zoeken op een paar verschillende dingen, maar niet allemaal tegelijk.

Dus op patientnummer OF woonplaats OF naam OF Geboortedatum.

En waarom weet ik niet, maar schijnbaar zoeken ze vaak niet op patient nummer, misschien omdat de patiënt het nummer niet bij de hand heeft ofzo.
En idd, met een typfoutje bij het invoeren of bij het zoeken daardoor vind je een patiënt niet.

  • edeboeck
  • Registratie: Maart 2005
  • Laatst online: 17-12 20:35

edeboeck

mie noow noooothing ...

RaZ schreef op maandag 14 november 2005 @ 17:55:
[...]
...
Checken op: Achternaam / Voornaam / Geboorte Datum
...
Zelfs dat is niet waterdicht. Een voorbeeldje: mijn moeder is op dezelfde dag geboren als haar tweelingzuster (tsja, gebeurt wel eens meer ;)), bovendien hebben ze allebei dezelfde eerste voornaam (officieel heet de ene "Maria Louisa" en de andere "Maria Josée") en om er een schepje bovenop te doen hebben ze allebei een tijd op hetzelfde adres gewoond.

Néén, dit is geen fictie, maar pure realiteit ... wat ze al voldoende problemen heeft opgeleverd ivm pensioen owv gemixte carrières e.d.

De ENIGE oplossing die er is, is de mensen hun UNIEKE ID laten invullen (wat we hier in België het RIJKSREGISTERNUMMER noemen). Anders krijg je toch problemen met mensen die van naam veranderen e.d. Enig nadeel: die mensen moeten altijd dit nr bij zich hebben of het van buiten kennen.

Om nu die dubbels uit de db te halen ... je zal nooit zeker weten of het nu gaat om 2 verschillende, dan wel één en dezelfde persoon enkel op de inhoud van de tabel. Veiligste is: de mensen met zelfde naam/voornaam/geboortedatum contacteren.

Het adres bij deze query betrekken is geen optie ... denk maar aan een verhuis.

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

Daarom is het juist zo belangrijk dat de gebruiker van het systeem goed ondersteund wordt! Je zou bijvoorbeeld kunnen denken aan het gebruik maken van 'LIKE'.

Je hebt in je systeem:
Frist van Houthalen
Peter van Hout.

als je dan zoekt op Hout of out krijg je bijde records te zien. waaruit je een selectie kan maken aan de hand behandelingen oid

[ Voor 7% gewijzigd door dip op 14-11-2005 18:20 ]

It's scientifically known, that base improves the tase of cheezes!


Verwijderd

Topicstarter
[ash] schreef op maandag 14 november 2005 @ 17:49:
Zelf heb ik op dit moment niet de mogelijkheid om dit te testen, maar onderstaande SQL statement geeft volgens mij het gewenste resultaat.
SQL:
1
2
3
4
SELECT naam, voornaam 
FROM patient 
GROUP BY naam,voornaam 
HAVING COUNT(nummer) > 1
JAAAH thnx hij werkt :) Elke naam die er 2x instaat heeft hij 1x weergeven...
Hij heeft 221 namen gevonden...Zoveel had ik ook weer niet verwacht...hoewel sommigen daarvan bijv. opa&kleinzooon zijn.
Nou ja ga ik die ff allemaal langs en bekijk dan wel welke ook echt dezelfde personen zijn :(

Nou ja als ik hier door ben dan hou ik t wel elke week even bij!!!

Hardstikke bedankt iig.


Oh ja, ik kan niet hier zomaar die database om gaan gooien..daar ben ik nog net iets te beginnend voor zeg maar :) Hoewel het me aardig lukt met SQL
En het is echt een heel grote databse (vind ik)...heeft meer dan 190 tabellen...
Dat ga ik niet even opnieuw normaliseren...

Ik kende trouwens dat HAVING niet helemaal...
Eerst zet je alle namen + voornamen op een rijtje.
Daarna zeg je met having count dat hij alles wat vaker dan 1 keer voorkomt er uit moet worden geselecteerd?

Maar wat bedoel je dan met (nummer) er tussen, want je selecteerd toch juist NIET op nummer maar op naam en voornaam...

[ Voor 15% gewijzigd door Verwijderd op 14-11-2005 18:32 ]


  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 08-12 23:21

_Sunnyboy_

Mooooooooooooooooo!

Het verschil tussen WHERE en HAVING is dat WHERE voor de group wordt uitgevoerd, en HAVING na de group.

De query waarvan jij zegt dat ie werkt is eigenlijk een nogal vreemde query, aangezien je idd een having uitvoerd op iets wat je geselecteerd hebt. Zal wel een merkwaardigheid van MySQL zijn, want onder Oracle zou dit niet werken.

Een query die hetzelfde zou moeten doen is:
SQL:
1
2
3
4
SELECT COUNT(nummer) AS occurance, naam, voornaam
FROM patient
GROUP BY naam, voornaam
HAVING occurance > 1

Je selecteert alle patienten, groepeert ze per naam & voornaam en telt vervolgens per groep hoeveel nummers er zijn. Vervolgens laat je alleen de groepen met meer dan 1 nummer zien.

Dit lijkt precies wat je wil. Echter, hou rekening met het feit dat sommige personen misschien dubbel in je database zitten, waarbij de naam net anders is geschreven, waardoor deze query ze niet laat zien.

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


  • Gé Brander
  • Registratie: September 2001
  • Laatst online: 12:14

Gé Brander

MS SQL Server

En hoe ga je nu achterhalen of ze inderdaad dubbel in de database staan, of dat het toch twee verschillende personen zijn?

Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!


  • BCC
  • Registratie: Juli 2000
  • Laatst online: 10:18

BCC

Ik weet niet wat ik enger moet vinden: Dat er in de zorg blijkbaar niet genormaliseerde databases zijn zonder constraints waardoor je dus blijkbaar prima voor je opa aangezien kan worden en andersom of dat ze een stagaire erop zetten om "even" de dubbelen eruit te filteren... :X :X

Hiervoor is toch het Sofi-nummer uitgevonden?

Ps.. ik zie dat het in Willemstad is.. dat scheelt :)

[ Voor 21% gewijzigd door BCC op 15-11-2005 14:49 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.

Pagina: 1