查询以找出 15 天的总患者数

Query to find out total patients for 15 days

我有一个问题。我有一个查询可以找出特定日期的患者人数

Select wtt1.wrt_ip_num, wtt1.wrt_from_ward_cd, wbm.wbm_room_num, wbm.wbm_bed_num, wtt1.wrt_in_dt, wtt1.wrt_out_dt
FROM W_TRANSFER_TXN wtt1, w_ward_master_base wmb, w_bed_master_base wbm
where wtt1.wrt_from_ward_cd=wmb.wwm_ward_cd and wmb.wwm_ward_locn='TMH' 
  and wbm.wbm_bed_num=wtt1.wrt_from_bed_num and wbm.wbm_room_num=wtt1.wrt_from_room_num and wbm.wbm_ward_cd=wtt1.wrt_from_ward_cd 
  and (wtt1.wrt_ip_num, wtt1.wrt_sl_num ) in 
    (Select wtt.wrt_ip_num, max(wtt.wrt_sl_num) wrt_sl_num 
    FROM W_TRANSFER_TXN wtt
    where /*wtt.wrt_ip_num='IP/20/034619' and*/ trunc(wtt.wrt_in_dt)<=TO_DATE('29-Sep-2020','DD-MON-YYYY') 
          and (wtt.wrt_out_dt is null or trunc(wtt.wrt_out_dt)>=TO_DATE('29-Sep-2020','DD-MON-YYYY'))
    group by wtt.wrt_ip_num);

目前正在取出日期为29日的ip号。它给出了没有。该特定日期的 IP 编号。 我想要做的是将整个查询放在一个循环中,在该循环中找出前 15 天的查询。那可能吗 。整个查询是否可以循环过去 15 天? 我们可以在日期字段所在的地方放入一个循环吗? 我可以通过更改日期来取出每天的患者数量,但我可以找出 15 天吗?

当您将 wtt.wrt_in_dt 固定为 date '2020-09-29' 时,查询该特定日期的 returns 数据。

考虑将条件更改为

trunc(wtt.wrt_in_dt) >= trunc(sysdate) - 15

这将 return 行 wrt_in_dt 在过去 15 天内。


如何生成日期?

SQL> select date '2020-10-20' + level - 1 datum
  2  from dual
  3  connect by level <= 5;

DATUM
----------
20.10.2020
21.10.2020
22.10.2020
23.10.2020
24.10.2020

SQL>

如果您想在 FOR 循环中使用日期,则必须“转换”为 Julian 日期(其数据类型为 NUMBER) 因为 FOR 循环不允许日期作为 边界 。这也意味着您必须将该 Julian 日期转换回才能在查询中使用。我没有任何 suitable table 所以 DBMS_OUTPUT.PUT_LINE 将不得不做。

SQL> set serveroutput on
SQL>
SQL> DECLARE
  2     l_datum         DATE := TRUNC (SYSDATE);
  3     l_datum_julian  NUMBER := TO_NUMBER (TO_CHAR (l_datum, 'j'));
  4  BEGIN
  5     FOR i IN l_datum_julian .. l_datum_julian + 5
  6     LOOP
  7        DBMS_OUTPUT.put_line (TO_CHAR (TO_DATE (i, 'j'), 'dd.mm.yyyy'));
  8     END LOOP;
  9  END;
 10  /
16.10.2020
17.10.2020
18.10.2020
19.10.2020
20.10.2020
21.10.2020

PL/SQL procedure successfully completed.

SQL>