查询以找出 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>
我有一个问题。我有一个查询可以找出特定日期的患者人数
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>