나는 다음 쿼리 함께 일하고 있어요 :집계 타임 스탬프
는SELECT contract,
source_ref1 AS "ORDER_NO",
part_no,
ifsapp.inventory_part_api.Get_description(contract, part_no) as "DESCRIPTION",
ifsapp.inventory_part_api.Get_unit_meas(contract, part_no) as "UNIT_MEAS",
date_applied,
(SELECT work_center_no FROM shop_order_operation where inventory_transaction_hist2.source_ref1 = shop_order_operation.order_no) AS "WORK_CENTER",
direction,
SUM(quantity) AS "QUANTITY",
(CASE
WHEN ((To_char(date_time_created, 'HH24:MI ') BETWEEN '05:45 ' AND '17:44') AND
date_applied = date_created) THEN 'SHIFT1'
WHEN (((To_char(date_time_created, 'HH24:MI') BETWEEN '17:45' AND '24:00') OR
(To_char(date_time_created, 'HH24:MI') BETWEEN '00:00' AND '05:44') AND
date_applied = date_created)) THEN 'SHIFT2'
ELSE 'MANUAL_ADJUST'
END) AS "SHIFT"
FROM ifsapp.INVENTORY_TRANSACTION_HIST2
WHERE part_no IN (select pc.part_no from ifsapp.HH_INV_PART_CHARS pc where pc.accounting_group = '400') AND
contract IN ('DE1', 'DE2') AND
transaction_code LIKE '%REC%' AND
direction IN ('+', '-') AND
source_ref_type = 'Shop Order' AND
To_char(date_applied, 'YYYY-MM-DD') BETWEEN '2017-01-01' AND '2017-12-26'
GROUP BY contract,source_ref1, part_no, ifsapp.inventory_part_api.Get_description(contract, part_no),
ifsapp.inventory_part_api.Get_unit_meas(contract, part_no), location_no, date_applied, direction,
date_time_created, date_created
ORDER BY date_applied
이 쿼리는 18,292 안타를 반환합니다.
CASE 문을 제거하고 GROUP BY 섹션에서 DATE_TIME_CREATED 및 DATE_CREATED를 제거하면 쿼리가 1356 건을 반환합니다.
우리는 CASE 문을 사용하여 Google 제품의 제작 과정을 확인했습니다. date_time_created 필드는 기본적으로 시간 소인입니다. 이 테이블에서 제품이 어떤 변화를 일으켰는지 확인할 수있는 유일한 필드입니다.
하지만 결과적으로 우리는 10 배나 많은 히트를 얻을 수 있습니다.
예제로 ORDER_NO 349321을 가져옵니다. 표시된 쿼리를 실행하면 61 개의 조회가 발생합니다. CASE 문을 제거하고 GROUP BY 섹션에서 DATE_TIME_CREATED 및 DATE_CREATED를 제거하면 두 번의 조회가 발생합니다.
2 교대 이상 주문을 완료하지 않았습니다. 따라서 ORDER_NO 349321에 대한 모든 트랜잭션의 타임 스탬프를 알 필요가 없으며 모든 타임 스탬프가 Shift 1 또는 Shift 2에 있는지 여부를 알 필요가 없습니다. 해당 주문에 대한 트랜잭션이 Shift 1 또는 Shift 2에서 완료하십시오.
이 사례 문을 통해 얻은 정보를 집계하여 어떤 방법으로 처리 할 수 있습니까? 나는 MAX와 AVG를 사용하여 내 사례 문장에서 시도했지만 동일한 수의 결과를 반환합니다.
대표적인 데이터 샘플과 원하는 결과를 제공하십시오. –
의도적으로 않는 한 "SHIFT 2"계산에서 OR 조건과 관련된 괄호 집합이 누락 된 것처럼 보입니다. 현재와 같은 방식으로 OR은 다른 조건과 연결되어 있지 않으므로 "AND"조건은 "AND"로 처리되지 않습니다. '(\t ( \t \t (TO_CHAR (date_time_created 'HH24 : MI') BETWEEN '17 : 45 'AND '24 : 00') OR \t \t (TO_CHAR (date_time_created 'HH24 : MI') BETWEEN '00 : 00 '과 '05 : 44')과 \t date_applied = DATE_CREATED \t) )' 이 원래 문제가 해결되지 않습니다,하지만 뭔가 지금 주목. – ravioli