我想向表中添加其他(缺失)行。 现有情况:我有一张病人表,其中有一个注册日期,我计算了病人已经注册了多长时间(“TimeInProgram”)。现在,我汇总了这一点,以获取当前处于此期间的患者人数(请参阅计数 - >属性“患者”)。最后,我总结了一个窗口函数来获取在特定时期内已经有WERE的患者人数。SQL:添加缺少的行
SELECT aggregation.*, SUM("Patients") OVER() "All", SUM("Patients") OVER (ORDER BY "TimeInProgram" DESC ROWS UNBOUNDED PRECEDING) "PatientsCounterInTime" FROM (
SELECT COUNT(DISTINCT "PatientID") "Patients", "TimeInProgram" FROM (
SELECT
pat."PatientID",
ROUND(((DAYS_BETWEEN(pat."RegisteredOnDate", NOW())+1)/7.0), 0, 'ROUND_UP') "TimeInProgram"
FROM t_patient pat
ORDER BY "PatientID"
) data
GROUP BY "TimeInProgram"
ORDER BY "TimeInProgram"
) aggregation
结果,你可以在这里看到:
PatientsCounterInTime PLUS以下行的患者在以下row.You的PatientsCounterInTime的值可以看到的问题:有一些“ TimeInProgram“ - 周如第4周或第5周缺失,因为此时没有患者在此期间。所以我想添加缺少的行。 “PatientsCounterInTime”的值在第4周,第5周应为162.“患者”当然为0.
我使用HANA作为数据库。
提前致以亲切的问候和感谢。
UPDATE:
SELECT "TiP" "TimeInProgram", "Patients", "PatientsCounterInTime" FROM (
SELECT aggregation.*, SUM("Patients") OVER() "All", SUM("Patients") OVER (ORDER BY "TimeInProgram" DESC ROWS UNBOUNDED PRECEDING) "PatientsCounterInTime" FROM (
SELECT COUNT(DISTINCT "PatientID") "Patients", "TimeInProgram" FROM (
SELECT
pat."PatientID",
ROUND(((DAYS_BETWEEN(pat."RegisteredOnDate", NOW())+1)/7.0), 0, 'ROUND_UP') "TimeInProgram"
FROM "t_patient" pat
ORDER BY "PatientID"
) data
GROUP BY "TimeInProgram"
ORDER BY "TimeInProgram"
) aggregation
)
RIGHT JOIN "t_time_in_program" t ON "TimeInProgram" = t."TiP";
(以下行PatientsCounterInTime PLUS患者是下一行的PatientsCounterInTime的值。)
您需要一个包含所有星期的日历表,基本上是一个单列,其中包含1到48,并且在该列上加上LEFT JOIN – Mihai
除了Mihai所说的内容之外,您还必须使用LEAD或LAG来获取最后一个部分计数器时间加入时(SINCE在离开后会有一个空值) – sagi
谢谢你的帮助!我加入了桌面并更新了上面的帖子。我不确定现在如何使用LEAD/LAG填写缺席专栏的数据。任何提示再次? @sagi – ScientiaEtVeritas