1

以下のクエリがありますが、「22-OCT-2012 AND 28-OCT-2012」のような週の範囲を配置する代わりに、CurrentWeek -2 または CurrentWeek-1 のようなコードを配置すると、クエリを毎回編集する必要がなくなります。実行する必要がある週。これの作り方知ってる?

ありがとうLD

    SELECT WO.USER_6 AS STYLE
 ,SUM (CASE WHEN (OPERATION.STATUS ='C' AND OPERATION.CLOSE_DATE BETWEEN '22-OCT-2012' AND '28-OCT-2012') THEN OPERATION.RUN_HRS ELSE 0 END) WEEK43
 ,SUM (CASE WHEN (OPERATION.STATUS ='C' AND OPERATION.CLOSE_DATE BETWEEN '29-OCT-2012' AND '04-NOV-2012') THEN OPERATION.RUN_HRS ELSE 0 END) WEEK44
FROM WORK_ORDER WO, OPERATION
WHERE  WO.BASE_ID = OPERATION.WORKORDER_BASE_ID
AND WO.Lot_ID = Operation.Workorder_Lot_ID
        AND WO.Sub_ID = Operation.Workorder_Sub_ID
        AND WO.Split_ID = Operation.Workorder_Split_ID
AND WO.TYPE ='W'
AND WO.WAREHOUSE_ID ='MEX-04'
AND OPERATION.CLOSE_DATE BETWEEN '22-OCT-2012'  AND '04-NOV-2012'
AND OPERATION.RESOURCE_ID IN ('171-4','171-ADD','171-3' ,'BAMEX-SEWCONC','BAMEX-SEWPATC')
AND OPERATION.RUN > 0
GROUP BY
WO.USER_6
4

2 に答える 2

0

私があなたの質問を理解したなら、あなたはこれを使ってこのように現在の平日を渡すことができます

SUM (CASE WHEN (OPERATION.STATUS ='C' AND OPERATION.CLOSE_DATE BETWEEN to_char(trunc(sysdate),'DD-MON-YYYY')  and to_char(trunc(sysdate)-6,'DD-MON-YYYY')) THEN OPERATION.RUN_HRS ELSE 0 END) WEEK43

これがあなたを助けることを願っています

于 2012-11-08T05:12:46.217 に答える
0

この場合、trunc関数を使用します。

currentweek will be trunc(sysdate,'D') 
current_week - 1 will be trunc(sysdate,'D') - 7
current week - 2 will be trunc(sysdate,'D') - 2 * 7

これにより、週の最初の曜日が日曜日になることに注意してください。月曜日が必要な場合は、ある日:

current week - 2 will be trunc(sysdate,'D') - 2 * 7 + 1

更新: フランクは正しいです。週の最初の日の動作は NLS_TERITORY に依存します

alter session set NLS_TERRITORY ='UNITED KINGDOM';
select trunc(sysdate,'D') from dual;
05-11-2012

alter session set NLS_TERRITORY ='AMERICA';
select trunc(sysdate,'D') from dual;
04-11-2012
于 2012-11-08T06:37:52.427 に答える