【问题标题】:how to implement a for loop in oracle sql如何在oracle sql中实现for循环
【发布时间】:2020-10-16 12:46:15
【问题描述】:

我是 oracle sql 的新手,我使用这个子查询来找出答案。医院里的病人。

 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);

这给出了 1 天的值。我想在 where 子句所在的地方运行一个 for 循环,并希望将值循环 10 天,以便输出 10 天。那可能吗。如果有怎么办?

【问题讨论】:

  • 请提供样本数据和期望的结果。
  • 我如何提供样本 dta 所需的结果是,不是给出 1 天的值,而是给出 15 天的值
  • 为什么坚持要有一个for循环?如果您想要一些特定的天数,也可以在查询中完成。你到底想要什么循环?
  • @sandeeppradhan 。 . .您可能很清楚您的数据是什么样的。您可能很清楚您的查询在做什么。这是。对其他人来说并不明显。您可以在查询中插入带有示例数据的文本表,以向其他人展示您的意图。
  • 您只能得到 1 个日期,因为只有 '29-Sep-2020' 可以同时是 = '29-Sep-2020'。如果你想要一个你需要的范围:trunc(wtt.wrt_in_dt) between to_date(低端日期)和to_date(高端日期)”.

标签: sql plsql oracle11g


【解决方案1】:

当您认为需要在数据库中使用FOR 循环时,很多时候您需要生成要循环的值,然后将这些值连接到表中。 Oracle 将为您处理循环。

生成数据的技巧有很多,最简单的一种是从DUAL中选择并使用UNION ALL构造一小组数据:

select wtt.wrt_ip_num, max(wtt.wrt_sl_num) wrt_sl_num 
from w_transfer_txn wtt
join
(
    select date '2020-09-20' the_date from dual union all
    select date '2020-09-21' the_date from dual union all
    select date '2020-09-22' the_date from dual union all
    select date '2020-09-23' the_date from dual union all
    select date '2020-09-24' the_date from dual union all
    select date '2020-09-25' the_date from dual union all
    select date '2020-09-26' the_date from dual union all
    select date '2020-09-27' the_date from dual union all
    select date '2020-09-28' the_date from dual union all
    select date '2020-09-29' the_date from dual
) dates
    on trunc(wtt.wrt_in_dt) = dates.the_date
group by wtt.wrt_ip_num;

生成 10 个日期的更短但更隐秘的方法是使用这样的分层查询:

select wtt.wrt_ip_num, max(wtt.wrt_sl_num) wrt_sl_num 
from w_transfer_txn wtt
join
(
    select date '2020-09-20' + level - 1 the_date
    from dual
    connect by level <= 10
) dates
    on trunc(wtt.wrt_in_dt) = dates.the_date
group by wtt.wrt_ip_num;

【讨论】:

    猜你喜欢
    • 2019-11-15
    • 1970-01-01
    • 2014-02-15
    • 2021-10-28
    • 1970-01-01
    • 2022-08-14
    • 2012-04-16
    • 2021-09-26
    • 2018-11-29
    相关资源
    最近更新 更多