SQL количество пациентов в больнице каждый день - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь рассчитать количество пациентов, находящихся в больнице каждый день в течение определенного периода, например: апрель 2018 года, на основании данных о поступлении и дате выписки.Так, например,

Patient ID  Admission date  Discharge date
A   25-Apr-18   25-Apr-18
B   25-Apr-18   26-Apr-18
C   26-Apr-18   28-Apr-18
D   29-Apr-18   01-May-18

даст следующее:

Date    Bed days
25-Apr-18   2
26-Apr-18   2
27-Apr-18   1
28-Apr-18   1
29-Apr-18   1
30-Apr-18   1

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Есть проблема стратегического уровня, которую вы должны выяснить, как вы хотите решить: что определяет даты?Другими словами, у вас есть таблица «желаемого результата» - как она получает даты в левой части?

Это может показаться глупым / глупым вопросом, но представьте, что у вас две строки вваш стол:

1/1/2018 through 1/3/2018
2/1/2018 through 2/3/2018

... ну, в вашем отчете должно быть все дни между 1/4 и 1/31, в которых было "0" пациентов, верно?Таким образом, в реальности вам придется либо циклически проходить диапазон дат и генерировать каждую дату, либо иметь основную таблицу «ListOfEveryDate» (как предложено в UnhandledExcepSean в его комментарии). А если вы хотите циклически просмотреть диапазон дат,Вы собираетесь, чтобы этот цикл происходил в SQL или на языке более высокого уровня, например .NET?

Лично я бы просто согласился с идеей MasterDateTable, даже если она немного неуклюжа, просто из-за того, насколько она проста.находится на уровне кода:

select
    date,
    (select subquery to get count of records in data table)
from
    masterDateTable
where date between @startDate and @endDate

... и до тех пор, пока у вас есть код, который обеспечивает заполнение таблицы датами, у вас все в порядке (вам не хотелось бы, чтобы код останавливалсяработает, потому что вы населили его только до 2020 года, но оказывается, что он все еще используется в 2021 году!)

0 голосов
/ 09 октября 2018

Если вы используете SQL Server, ваш код будет примерно таким:

SELECT PatientID
       ,DATEDIFF(DAY, [AdmissionDate], [DischargeDate]) AS [Bed Days]
FROM [YourTable]
GROUP BY [PatientID]

, который будет возвращать счет PatientID для каждого дня.Однако без дополнительной информации, такой как тип / версия базы данных или простой для чтения предпочтительный вывод, будет труднее получить желаемый результат.

...