最高/最低pl / sql

用户名

我已制定了在给定日期的特定时间显示最受欢迎和最低人气商品的过程。该过程没有错误或异常,并且所有功能均正常运行。如您所见,为了显示Items上的第一个记录,查询被重复了两次,但唯一的区别是顺序(ASC和DESC)!有什么办法可以减少代码量?如何在一个查询而不是两个查询中显示最高和最低的商品?我只想使代码整洁且易于阅读。任何帮助将非常感激。

CREATE OR REPLACE PROCEDURE highest_lowest(param IN DATE)
AS
  v_pno_low  NUMBER(5);
  v_pno_high NUMBER(5);
  BEGIN

    SELECT item_no INTO v_pno_low
    FROM (
      SELECT
        items.item_no,
        sum(items.quantity)                 AS total,
        to_char(prodcution_d, 'dd-mm-yyyy') AS pro_date
      FROM items
        JOIN parts ON parts.serial_no = items.serial_no
      GROUP BY item_no, to_char(prodcution_d, 'dd-mm-yyyy')
      ORDER BY sum(items.quantity) ASC)
    WHERE rownum = 1
          AND pro_date = to_char(param_date, 'mm-yyyy');

    dbms_output.put_line('LOWEST ITEM: ' || v_pno_low);

    SELECT item_no INTO v_pno_low
    FROM (
      SELECT
        items.item_no,
        sum(items.quantity)                 AS total,
        TO_CHAR(prodcution_d, 'dd-mm-yyyy') AS pro_date
      FROM items
        JOIN parts ON parts.serial_no = items.serial_no
      GROUP BY item_no, to_char(prodcution_d, 'dd-mm-yyyy')
      ORDER BY SUM(items.quantity) DESC)
    WHERE rownum = 1
          AND pro_date = to_char(param_date, 'mm-yyyy');

    dbms_output.put_line('HIGHEST POPULAR ITEM: ' || v_pno_high);

  END;
  /
乔恩·海勒

使用FIRSTLAST函数可在一个查询中同时获取最大值和最小值:

--Step 2: The SERIAL_NO for the smallest and largest quantity per day.
select
    min(serial_no) keep (dense_rank first order by quantity_sum) low_serial_no,
    min(serial_no) keep (dense_rank last  order by quantity_sum) high_serial_no
into v_pno_low, v_pno_high
from
(
    --Step 1: Sum of quantity, per day, for the specified month.
    select
        items.serial_no,
        trunc(production_date, 'day') the_date,
        sum(quantity) quantity_sum
    from items
    join parts
        on items.serial_no = parts.serial_no
    where trunc(production_date, 'month') = trunc(param_date, 'month')
    group by items.serial_no, trunc(production_date, 'day')
);

首先,KEEP语法有点混乱。外部查询获取SERIAL_NO的最小值,但仅在第一个(最低)QUANTITY_SUM和最后一个(最高)QUANTITY_SUM的行之间。

该查询也使用TRUNC代替TO_CHAR通常最好将日期保留为日期,并避免使用任何转换函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sql按从最高到最低的顺序

来自分类Dev

SQL选择最高时间戳为最低的记录

来自分类Dev

Oracle SQL:查找最高薪水和最低薪水之间差异最大的工作的工作ID

来自分类Dev

比较两个数字并将值1或0设置为Excel或SQL Server 2012中的最高或最低

来自分类Dev

在T-SQL中,如何从最低值到最高值对钱(我使用VARCHAR)进行排序?

来自分类Dev

比较两个数字并将值1或0设置为Excel或SQL Server 2012中的最高或最低

来自分类Dev

SQL 查询为其他列中的每个唯一条目返回最高和最低

来自分类Dev

最高到最低

来自分类Dev

从平均最高到最低

来自分类Dev

PL SQL动态SQL

来自分类Dev

使用GROUP BY和HAVING在不同产品类别中的最高和最低平均价格[SQL]

来自分类Dev

找到最高和最低的薪水

来自分类Dev

显示最低和最高值的NoUISlider

来自分类Dev

删除Java中数组的最高和最低

来自分类Dev

从最高到最低排序此数组

来自分类Dev

最高和最低列的amChart颜色

来自分类Dev

如何显示数组的最高和最低

来自分类Dev

搜寻TIntSet中的最高和最低元素?

来自分类Dev

OpenWeathermap:JSON(最低和最高温度)

来自分类Dev

如何获得最高和最低号码

来自分类Dev

数组中最高和最低的问题

来自分类Dev

将文件中的最高到最低排序

来自分类Dev

浮点最低和最高的数值限制

来自分类Dev

将数组从最低到最高排序 FORTRAN

来自分类Dev

PL / SQL层次排序

来自分类Dev

PL / SQL Oracle交互

来自分类Dev

从PL / SQL调用Java

来自分类Dev

PL / SQL提交问题

来自分类Dev

增量聚合:PL / SQL