0

I am trying to retrieve only the most recent date for each item using Oracle however I am unable to get this working. I have tried using Min e.g MIN(ActDemand.DUEDATE_ED) AS Date_Required, but get a GROUP BY error ORA-00979: not a group by experession.

Code Example

WITH CoreDateData AS
 (SELECT BusinessName,
  A.Business,
  A.TYPE,
  A.Item_Code,
  A.wordnoent,
  A.Item_Description,
  A.Date_Required,
  A.TotalQtyRequired,
  A.SumTotalQtyRequired,
  NVL(SUM (Quantity_Required) OVER (PARTITION BY Business, TYPE, ITEM_CODE order BY Business, ITEM_CODE, Date_Required asc ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),0) AS CumulativeTotalQtyRequired,
  ROW_NUMBER () OVER (PARTITION BY Business, TYPE, Item_Code ORDER BY Date_Required asc) AS ROWNUMBER,
  SYSDATE + 14 AS DateTo
  FROM (SELECT DISTINCT DISCO_BUSINESS (Items.ACCOUNT15) BUSINESSNAME,
        Items.Account15 AS Business,
        Items.Partype AS TYPE,
        Items.Partno AS Item_Code,
        ActDemand.wordnoent as wordnoent,
        Items.Description AS Item_Description,
       TO_DATE(ActDemand.DUEDATE_ED, 'DD-MM-YY') AS Date_Required,
       ActDemand.DUEQTY AS Quantity_Required,
      NVL(SUM (ActDemand.DUEQTY) OVER (PARTITION BY Items.Account15, Items.Partype, Items.Partno),0) AS SumTotalQtyRequired,
     ActDemand.DUEQTY as TotalQtyRequired
   FROM  Items
   LEFT OUTER JOIN ACTUAL_DEMAND ActDemand
   ON ActDemand.Business = Items.Account15
   AND ActDemand.Partno_com = Items.Partno
   WHERE TRIM(actdemand.WORDNOENT) IS NOT NULL
   ORDER BY Items.Account15, Items.Partype, Items.Partno,Date_Required) A)
   SELECT BusinessName,
   Business,
   TYPE,
   Item_Code,
   wordnoent,
   Item_Description,
   Unapproved_Lot,
   Lot_Quantity,
   Date_Required,
   TotalQtyRequired,
   SumTotalQtyRequired,
   CumulativeTotalQtyRequired,
   Current_Approved_Stock,
   Approved_Stock_quantity,
   Total_Approved_Stock_quantity,
   DateTo
  FROM (
  SELECT BusinessName,
         Business,
         TYPE,
         Item_Code,
         wordnoent,
         Item_Description,
         Unapproved_Lot,
         Lot_Quantity,
         Date_Required,
         TotalQtyRequired,
         SumTotalQtyRequired,
         CumulativeTotalQtyRequired,
         Current_Approved_Stock,
         Approved_Stock_quantity,
         SUM(Approved_Stock_quantity)
         OVER(PARTITION BY Business,
         TYPE, Item_Code, wordnoent, unapproved_lot)
         AS Total_Approved_Stock_quantity,
         DateTo
       (SELECT DISTINCT B.BusinessName,
                        B.Business,
                        B.TYPE,
                        B.Item_Code,
                        B.wordnoent,
                        B.Item_Description,
                        B.Unapproved_Lot,
                        B.Lot_Quantity,
                        B.Date_Required,
                        B.TotalQtyRequired,
                        B.SumTotalQtyRequired,
                        B.CumulativeTotalQtyRequired,
                    
                                         CASE WHEN APLot.lotapproind = 'Y'
                                         THEN APLot.lotnopre || APLot.lotno
                                         ELSE 'N/A'
                                         END AS Current_Approved_Stock, 
                                         CASE WHEN APLot.lotapproind = 'Y'
                                         THEN NVL (APLot.lotqty, 0)
                                         ELSE 0
                                         END AS Approved_Stock_quantity,
                                         DateTo
                                         FROM (SELECT BusinessName,
                                         Business,
                                         TYPE,
                                         Item_Code,
                                         wordnoent,
                                         Item_Description,
                                         Unapproved_Lot,
                                         NVL (Lot_quantity, 0) AS Lot_Quantity,
                                         Date_Required,
                                         TotalQtyRequired,
                                         SumTotalQtyRequired,
                                         CumulativeTotalQtyRequired,
                                         ROW_NUMBER () OVER (PARTITION BY Business, TYPE, Item_Code ORDER BY Date_Required asc) AS NEWROWNUMBER,
                                         TO_DATE (DateTo, 'DD/MM/RRRR') AS DateTo
                                    FROM (SELECT DISTINCT CDD.BusinessName, CDD.Business, CDD.TYPE, CDD.Item_Code, CDD.wordnoent, CDD.Item_Description,
                                              
                                                CASE WHEN UPPER (Unapprove.LotApproind) != 'Y'
                                                     THEN Unapprove.LotNoPre || Unapprove.LotNo
                                                     ELSE 'N/A'
                                                     END AS Unapproved_Lot,
                                                     CASE WHEN Unapprove.lotapproind != 'Y'
                                                          THEN Unapprove.Lotqty
                                                      
                                                          END AS Lot_quantity,
                                                      CDD.Date_Required,
                                                      CDD.TotalQtyRequired as TotalQtyRequired,
                                                      CDD.SumTotalQtyRequired AS SumTotalQtyRequired,
                                                      CDD.CumulativeTotalQtyRequired AS CumulativeTotalQtyRequired,
                                                      CDD.DateTo
                                                      FROM CoreDateData CDD
                                                      INNER JOIN (SELECT UNLOT.PARTNO_LOT, UNLOT.ACCOUNT15_LOT, UnLot.Lotqty, UnLot.lotapproind,
                                                      UnLot.LotNoPre, UnLot.LotNo
                                                      FROM UnLot
                                                INNER JOIN Inv
                                                   ON UNLOT.PARTNO_LOT = Inv.partno_inv
                                                  AND UNLOT.ACCOUNT15_LOT = Inv.Account15_Inv
                                                  AND approind = 'M'
                                                INNER JOIN  Alt
                                                   ON UNLOT.PARTNO_LOT = Alt.partno_alt
                                                   AND UNLOT.ACCOUNT15_LOT = Alt.Account15_alt
                                                   AND UNLOT.LOTNO = ALT.LOTNO_ALT
                                                   AND locqrstock = 0
                                                 WHERE (UnlOT.lotqty != 0)
                                                   AND UPPER (UnLot.LotApproind) != 'Y') Unapprove
                                                    ON CDD.Item_Code = Unapprove.partno_lot
                                                   AND CDD.Business = Unapprove.Account15_Lot
                                                    )) B
              LEFT OUTER JOIN ApLot
                ON B.Item_Code = ApLot.partno_lot
               AND B.Business = ApLot.Account15_Lot
               AND UPPER (APLot.LotApproind) = 'Y'
               AND ApLot.lotqty != 0)) A
  WHERE (CumulativeTotalQtyRequired > A.Total_Approved_Stock_quantity)
 ORDER BY DATE_REQUIRED ASC

Below is an example of a partial data extract

Data Example

Business Type Item Description Unapproved Lots Lot Quantity Date Required
Alpha IN I100 A Description L102 90414 15 Oct 21
Alpha IN I100 A Description L102 90414 15 Oct 21
Alpha IN I100 A Description L102 90414 15 Oct 21
Alpha IN I100 A Description L102 90414 18 Oct 21
Alpha IN I100 A Description L102 90414 18 Oct 21
Alpha IN I100 A Description L102 90414 18 Oct 21

So for the example above I would only like to return the top three rows where the Date Required = 15 Oct 2021

I would be grateful for any help of assistance.

NMS
  • 35
  • 1
  • 1
  • 7

0 Answers0