Расчет количества дней между датой поступления и сегодняшним днем - PullRequest
0 голосов
/ 28 декабря 2011

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

Я не могу понять, как отредактировать его, чтобы рассчитать дни пациента, когда дата выписки не была завершена ... пациент все еще находится в больнице. Если мне кажется, что я должен использовать Coalesce или ISNULL, чтобы найти записи, в которых дата выписки равна NULL, но я не программист и буду признателен за вашу помощь.

WITH Mos AS (
  SELECT
  D.ED_ADMIT_DATE,
  D.ED_DISCHARGE_DATE,
  Number,

  DateAdd(Month, Number, D.ED_ADMIT_DATE - Day(D.ED_ADMIT_DATE) + 1) MoDate
 FROM
  cases_cstm D
  INNER JOIN master.dbo.spt_values V ON V.Number <= DateDiff(Month, D.ED_ADMIT_DATE,  D.ED_DISCHARGE_DATE)
WHERE
  V.Type = 'P'), Dys AS (
SELECT
  MoDate,
  DateDiff(
     Day,
     CASE WHEN Number = 0 THEN ED_ADMIT_DATE ELSE MoDate END,
     CASE WHEN Number = DateDiff(Month, ED_ADMIT_DATE, ED_DISCHARGE_DATE) THEN  ED_DISCHARGE_DATE ELSE DateAdd(Month, 1, MoDate) -1 
 END
  ) + 1 Cnt
FROM Mos)
 SELECT  Year(MoDate) Yr,
 Coalesce(DateName(Month, MoDate), 'Total') Mo,
 Convert(varchar(11), Sum(Cnt)) + ' day' + CASE WHEN Sum(Cnt) = 1 THEN '' ELSE 's' END Descr

FROM Dys
GROUP BY  MoDate
WITH ROLLUP
ORDER BY
Grouping(MoDate),
MoDate;

1 Ответ

3 голосов
/ 28 декабря 2011

Вы можете заменить каждое вхождение ED_DISCHARGE_DATE на:

IsNull(ED_DISCHARGE_DATE,getdate())

Используется текущее время, когда дата разряда недоступна.

...