0

I have a query which calculates the timestamp difference as Duration in hours & minutes and Then Rounds it to the closest hour based on the rule:

For ex: If minutes > 29, then Duration= Hours+1 Else Duration=Hours

 SELECT OC.BU_ID   ,
        OC.ORD_NBR ,
        OC.STRT_DTS,
        OC.END_DTS ,
        CASE
               WHEN CAST(EXTRACT(MINUTE FROM ((OC.END_DTS - OC.STRT_DTS) DAY(4) TO SECOND)) AS     DECIMAL) > 29
               THEN CAST(EXTRACT(DAY FROM ((OC.END_DTS    - OC.STRT_DTS) DAY(4) TO SECOND)) *24 AS DECIMAL)+ CAST(EXTRACT(HOUR FROM ((OC.END_DTS - OC.STRT_DTS) DAY(4) TO SECOND)) AS DECIMAL) + 1
               ELSE CAST(EXTRACT(DAY FROM ((OC.END_DTS    - OC.STRT_DTS) DAY(4) TO SECOND)) *24 AS DECIMAL)+ CAST(EXTRACT(HOUR FROM ((OC.END_DTS - OC.STRT_DTS) DAY(4) TO SECOND)) AS DECIMAL)
        END                                                                                                                                                                                                        AS ROUNDED_DURATION,
        CAST(EXTRACT(DAY FROM((OC.END_DTS - OC.STRT_DTS DAY(4) TO SECOND))) *24 AS DECIMAL(18,2)) +(EXTRACT(HOUR FROM ((OC.END_DTS - OC.STRT_DTS) DAY(4) TO SECOND))) +(CAST(EXTRACT(MINUTE FROM ((OC.END_DTS - OC.STRT_DTS) DAY(4) TO SECOND)) AS DECIMAL(18,2)) /60 ) AS "HOUR + % MINUTES"
 FROM   MFG_INC.OC_ENTRY_ROLLUP_AMER_STEP1 OC
 WHERE  OC.ORD_NBR = ''CAST(EXTRACT(YEAR FROM ((OC.END_DTS - OC.STRT_DTS) YEAR(4) TO MONTH)) AS DECIMAL) <=27
 AND
        (
               OC.END_DTS  IS NOT NULL
        AND    OC.STRT_DTS IS NOT NULL
        )

Sample Results for one order:

BU_ID   ORD_NBR ORD_CYCLE_STG_CD    ORD_CYCLE_SUBSTG_CD STRT_DTS    END_DTS CYCLE_DRTN_HRS  HOUR + % MINUTES
1212    83038398    ORDER   ENTRY   5/28/2010 12:28 5/28/2010 12:38 0   0.17
1212    83038398    ORDER   ENTRY   5/28/2010 12:28 5/28/2010 12:38 0   0.17
1212    83038398    ORDER   PROCESS 5/28/2010 12:38 5/28/2010 12:39 0   0.02
1212    83038398    ORDER   PROCESS 5/28/2010 12:38 5/28/2010 12:39 0   0.02
1212    83038398    PLAN    NETWORK 5/28/2010 12:39 5/29/2010 9:24  21  20.73
1212    83038398    PLAN    NETWORK 5/28/2010 12:39 5/29/2010 9:24  21  20.73
1212    83038398    PLAN    FACILITY    5/29/2010 9:24  5/31/2010 1:53  40  40.47
1212    83038398    PLAN    FACILITY    5/29/2010 9:24  5/31/2010 1:53  40  40.47
1212    83038398    BUILD   BUILD   5/31/2010 1:53  6/1/2010 4:50   27  26.93
1212    83038398    BUILD   BUILD   5/31/2010 1:53  6/1/2010 4:50   27  26.93
**1212  83038398    DELIVER DELIVER 6/1/2010 4:50   6/9/2010 8:15   194 195.4
1212    83038398    DELIVER DELIVER 6/1/2010 4:50   6/9/2010 8:15   194 195.4**

The last two lines are strange. Instead of Rounding it 195, it has subtracted 1 (195 - 1) and shows 194. Can someone please throw light on what is the error with the above calculation?

flag

Your Answer

Get an OpenID
or

Browse other questions tagged or ask your own question.