Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ilość osób, które mają wizytę w wybranym okresie czasu, ale więcej niż X ogólem
monikar
post 23.03.2022, 12:16:52
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 23.03.2022

Ostrzeżenie: (0%)
-----


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):

  1. SELECT DISTINCT(PatientID), Patient.firstname, patient.lastname, COUNT(DISTINCT(PatientID)), count(*),
  2. (SELECT count(*) FROM Visit v
  3. JOIN Patient p ON v.patientID = p.id
  4. WHERE v.x_removetime IS NULL
  5. AND p.ID = Patient.Id
  6. ) AS a
  7. FROM Patient
  8. JOIN Visit ON Visit.patientID = patient.id
  9. WHERE Visit.X_RemoveTime IS NULL
  10. AND Visit.StartTime BETWEEN '2022-03-01' AND '2022-03-30'
  11. GROUP BY Patient.id
  12. HAVING count(*) > 2


Proszę o wskazówki lub jakąś inną pomoc smile.gif
Go to the top of the page
+Quote Post
nospor
post 23.03.2022, 12:28:01
Post #2





Grupa: Moderatorzy
Postów: 36 523
Pomógł: 6309
Dołączył: 27.12.2004




Przekombinowane i masa literowek

  1. SELECT p.id, p.firstname, p.lastname, count(p.id) FROM Patient p
  2. LEFT JOIN Visit v ON v.patientID = p.id
  3. WHERE v.X_RemoveTime IS NULL
  4. AND v.StartTime BETWEEN '2022-03-01' AND '2022-03-30'
  5. GROUP BY p.id
  6. HAVING count(p.id) > 2


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
monikar
post 23.03.2022, 12:38:39
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 23.03.2022

Ostrzeżenie: (0%)
-----


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:
  1. SELECT DISTINCT(PatientID), Patient.firstname, patient.lastname, COUNT(DISTINCT(PatientID)), count(*),
  2. (SELECT count(*) FROM Visit v
  3. JOIN Patient p ON v.patientID = p.id
  4. WHERE v.x_removetime IS NULL
  5. AND p.ID = Patient.Id
  6. ) AS a
  7. FROM Patient
  8. JOIN Visit ON Visit.patientID = patient.id
  9. WHERE Visit.X_RemoveTime IS NULL
  10. AND Visit.StartTime BETWEEN '2022-03-23 00:00:00' AND '2022-03-23 23:59:59'
  11. GROUP BY Patient.id
  12. HAVING count(*) > 2


Przy takim zapytaniu obecnie zwraca mi liczbę 0. Nie zwracaj uwagi na razie na to co jest w select (kolumny) - testowo sobie tak wprowadzam aby weryfikować poprawność danych pacjentów.
Go to the top of the page
+Quote Post
nospor
post 23.03.2022, 12:51:03
Post #4





Grupa: Moderatorzy
Postów: 36 523
Pomógł: 6309
Dołączył: 27.12.2004




No tak, nie doczytalem

  1. SELECT p.id, p.firstname, p.lastname, count(p.id) FROM Patient p
  2. LEFT JOIN Visit v ON v.patientID = p.id
  3. WHERE
  4. p.id IN (SELECT patiendID FROM Visit GROUP BY patientID HAVING count(patientID) > 2)
  5. AND
  6.  
  7. v.X_RemoveTime IS NULL
  8. AND v.StartTime BETWEEN '2022-03-01' AND '2022-03-30'
  9. GROUP BY p.id


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
monikar
post 23.03.2022, 13:04:22
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 23.03.2022

Ostrzeżenie: (0%)
-----


Chyba działa poprawnie, dzięki śliczne za pomoc smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 10.11.2024 - 18:56