Вернуть право с просьбой - PullRequest
0 голосов
/ 15 марта 2019

Можете ли вы помочь с запросом?Может быть, это дублируется, я понимаю, но мне нужна ваша помощь, чтобы решить эту проблему.

Моя схема:

enter image description here

У меня есть эти самые таблицы:

doctors
id name             profession 
 1 James Harden     dental 
 2 James Jones      therapist 
 3 LeBron James     cardiologist 
 4 Kobe Braynt      surgeon 
 5 Sabrina Williams nurse 
 6 Tyler Okonma     speech therapist 
 7 John Snow        pediatrician

patients 
id name         diagnostic 
 1 Mo Bamba     tooth pulling out
 2 Kaney West   astma 
 3 Post Malone  heart attack 
 4 Denzel Curry headache 
 5 Nicola Jokic stomac-ache 
 6 Dwayne Wade  AIDS 
 7 Boo Aby      headahce

visits
doctorId  patientId  visitDate
1           1         2019-03-09
2           4         2019-03-01
2           5         2019-02-26
2           6         2019-02-05
3           3         2019-02-13
4           2         2019-03-07
7           1         2019-02-14
7           7         2019-02-15

Мне нужнораспечатать врачей, обслуживающих наибольшее число пациентов за предыдущий месяц.

Мой запрос:

select doctorid, count(distinct patientid) as counter
from visits v
where visitdate >= (curdate() - interval day(visitdate) - 1 day) - interval 1 month and
      visitdate < curdate() - interval day(visitdate) - 1 day
group by doctorid
having count(distinct patientid) = (select count(distinct v2.patientid) as cnt
                                    from visits v2
                                    where v2.visitdate >= ((curdate() - interval day(v2.visitdate) - 1 day) - interval 1 month) and
                                          v2.visitdate < (curdate() - interval day(v2.visitdate) - 1 day)
                                    group by v2.doctorid
                                     order by cnt desc
                                     limit 1
                                   ); 

Результаты по моему запросу:

   doctorId   counter
   7              2

Я не понимаю, почему возвращается только один doctorId.

Мне нужно вывести только вот так:

       doctorId   counter
        7           2
        3           2

Спасибо в avadance.

1 Ответ

0 голосов
/ 15 марта 2019

если у вас более старая версия, вы можете использовать запрос, подобный этому:

SELECT doctorid, SUM(1) as counter
FROM visits v
WHERE visitdate 
    BETWEEN 
        LAST_DAY(now() - INTERVAL 2 MONTH) + interval 1 DAY 
    AND
        LAST_DAY(now() - INTERVAL 1 MONTH)
GROUP BY doctorId
HAVING counter = (
    SELECT count(*) as cnt
    FROM visits
    WHERE visitdate 
        BETWEEN 
            LAST_DAY(now() - INTERVAL 2 MONTH) + interval 1 DAY 
        AND
            LAST_DAY(now() - INTERVAL 1 MONTH)
    GROUP BY doctorId
    ORDER BY cnt DESC
    LIMIT 1
) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...