Hej, próbuje utworzyć zapytanie do bazy, które zwróci mi:
- ilość osób danego dnia, które:
- mają wizytę w wybranym okresie czasu i :
- będą to tylko te osoby, które ogółem mają więcej niż dwie wizyty
Mam dwie tabele: patient i visit. visit łączy się z patient po patientid. Przyjmujemy, że patient to pacjenci , a visit to wizyty tych pacjentów, co za tym idzie każdy pacjent może mieć X wizyt.
Mam problem z ograniczeniem tych dat. To co udało mi się do tej pory stworzyć (zapytanie nie zwraca żądanej wartości):
SELECT DISTINCT(PatientID), Patient.firstname, patient.lastname, COUNT(DISTINCT(PatientID)), count(*), (SELECT count(*) FROM Visit v JOIN Patient p ON v.patientID = p.id WHERE v.x_removetime IS NULL AND p.ID = Patient.Id ) AS a FROM Patient JOIN Visit ON Visit.patientID = patient.id WHERE Visit.X_RemoveTime IS NULL AND Visit.StartTime BETWEEN '2022-03-01' AND '2022-03-30' GROUP BY Patient.id HAVING count(*) > 2
Przekombinowane i masa literowek
SELECT p.id, p.firstname, p.lastname, count(p.id) FROM Patient p LEFT JOIN Visit v ON v.patientID = p.id WHERE v.X_RemoveTime IS NULL AND v.StartTime BETWEEN '2022-03-01' AND '2022-03-30' GROUP BY p.id HAVING count(p.id) > 2
Niestety, ale zaproponowałeś rozwiązanie które zwraca pacjentów, którzy w wybranym zakresie czasu mają więcej niż jedną wizytę, a nie takie jest założenie.
Muszę końcowo otrzymać jedną liczbę.
Chodzi mi o to, że np mamy dwóch pacjentów:
Anetek Bela, który ma wizyty:
-2022-02-13
-2022-02-28
-2022-03-23
Szymon Majewski, który ma wizyty:
-2022-01-02
-2022-03-01
-2022-03-22
Querka powinna zwrócić mi liczbę 1, bo tylko jeden pacjent spełnia warunki:
-ma wizytę w dniu 2022-03-23
-ogólnie ma więcej niż jedną wizytę
Zakładając OFC taki zakres dat:
SELECT DISTINCT(PatientID), Patient.firstname, patient.lastname, COUNT(DISTINCT(PatientID)), count(*), (SELECT count(*) FROM Visit v JOIN Patient p ON v.patientID = p.id WHERE v.x_removetime IS NULL AND p.ID = Patient.Id ) AS a FROM Patient JOIN Visit ON Visit.patientID = patient.id WHERE Visit.X_RemoveTime IS NULL AND Visit.StartTime BETWEEN '2022-03-23 00:00:00' AND '2022-03-23 23:59:59' GROUP BY Patient.id HAVING count(*) > 2
No tak, nie doczytalem
SELECT p.id, p.firstname, p.lastname, count(p.id) FROM Patient p LEFT JOIN Visit v ON v.patientID = p.id WHERE p.id IN (SELECT patiendID FROM Visit GROUP BY patientID HAVING count(patientID) > 2) AND v.X_RemoveTime IS NULL AND v.StartTime BETWEEN '2022-03-01' AND '2022-03-30' GROUP BY p.id
Chyba działa poprawnie, dzięki śliczne za pomoc
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)