Первое сообщение здесь, но может ли кто-нибудь помочь или помочь мне понять следующую проблему. Для следующей таблицы «Patient_Table», как я могу узнать общее количество дней, ,Microsoft SQL Server вычисляет общее время между последовательными событиями
ID Patient_ID Listing_Number Date Status
-----------------------------------------------------------------
1 22 1 01/01/2016 Healthy
2 22 2 01/11/2016 Sick
3 34 1 01/13/2016 Healthy
4 22 3 01/20/2016 Healthy
5 22 4 01/22/2016 Sick
6 22 5 01/23/2016 Healthy
Ниже приведена моя логика до сих пор, но я не уверен в правильном синтаксисе.
declare
@count int = 1,
@Days_sicks int = 0
while @count <= (select max (Listing_number) from Patient_Table where Patient_id = '22')
begin
case
when (select status from Patient_Table where Patient_id = '22' and Listing_number = @count) = 'Sick'
then @Days_sicks = @Days_sicks + datediff('dd', (select min date from Patient_Table where patient_id = 22 and listing_number > @count and status != 'Sick'), (select date from patient_table where patient_id = 22 and listing_number = @count)
else @Days_sicks
end as Days_sicks
set @Count = @Count + 1
END;
Я также попытался это одно, но это не работает очень хорошо, и я имею проблему с группой по статье
SELECT t1.patient_id,
DATEDIFF(dd,
t1.date,
(SELECT MIN(t3.date)
FROM Patient_Table t3
WHERE t3.patient_id = t1.patient_id
AND t3.date> t1.date) as Days_sicks
)
FROM Patient_Table t1
WHERE EXISTS(
SELECT 'NEXT'
FROM Patient_Table t2
WHERE t2.patient_id = t1.patient_id
AND t2.date> t1.date
AND t2.status != 'sick')
and t1.patient_id = '22'
желаемого результата
Patient id Days_sicks
22 10
Какова логика quesiton, min (date) до max (date), где status = 'Sick'? – McNets
Не могли бы вы указать версию sql-сервера – AldoRomo88
@why 10? если это не будет? – CodingYoshi