편집 1 (설명) : 지금까지 답변 해 주셔서 감사합니다. 응답은 만족 스럽습니다.
답변에 기반하여 문제의 한 가지 측면을 올바르게 설명하지 못했기 때문에 질문을 명확히하고 싶습니다. (혼자 힘겨운 시간을 정하는 데있어 그것이 내 잘못이라고 생각합니다.)
문지름 : 결과 집합에는 '2010-01-03'및 '2010-01-09'사이의 스탬프 만있는 레코드와 레코드 중 하나가 있어야합니다. 여기서 첫 번째 레코드의 각 order_num에 대해 tstamp는 NULL입니다. (항상은 각 order_num에 대해 null tstamp가됩니다.)
에 '2010-01-03'및 '2010-01-09'사이의 값이있는 경우 특정 order_num에 대한 레코드가 모두 표시됩니다. 예를 들어, order_num = 2이고 tstamp = 2010-01-12 00:00:00 인 다른 레코드가있는 경우 이 아니고이 결과에 포함되어야합니다."A UNION (B in A)"를 사용하는 것보다 효율적인 SQL?
원래 질문 :
은 ID (고유 한), order_num, tstamp (타임 스탬프)를 포함하는 주문 테이블을 고려하고, (하나의 항목이 주문에 포함) ITEM_ID. 순서가 수정되지 않은 경우 tstamp는 null이며,이 경우 동일한 order_num을 가진 다른 레코드가 있고 tstamp에 변경이 발생한 시간 소인이 포함됩니다.
예 ...
id order_num tstamp item_id __ _________ ___________________ _______ 0 1 100 1 2 101 2 2 2010-01-05 12:34:56 102 3 3 113 4 4 124 5 5 135 6 5 2010-01-07 01:23:45 136 7 5 2010-01-07 02:46:00 137 8 6 100 9 6 2010-01-13 08:33:55 105
특정 날짜 범위 동안 한 번 이상 수정 된 (order_num 기준) 모든 주문을 검색 할 수있는 가장 효율적인 SQL 문은 무엇입니까
? 즉, 각 주문에 대해 동일한 order_num (NULL tstamp가있는 레코드 포함)이 포함 된 모든 레코드가 필요합니다. 각 order_num에 대해 order_num 중 하나 이상이 tstamp NOT NULL이고 tstamp BETWEEN '2010-01-03' AND '2010-01-09'. order_num 중 적어도 하나가 tstamp NOT NULL을 가지고있는 곳입니다. 제가 어려움을 겪고 있습니다.id order_num tstamp item_id __ _________ ___________________ _______ 1 2 101 2 2 2010-01-05 12:34:56 102 5 5 135 6 5 2010-01-07 01:23:45 136 7 5 2010-01-07 02:46:00 137
기본적으로 "A UNION (A에서 B)"입니다 I는이와 함께 제공되는 SQL을,하지만 천천히 실행하고 내가 거기에 희망 :
결과 집합은 다음과 같아야합니다 보다 효율적인 솔루션입니다 :
SELECT history_orders.order_id, history_orders.tstamp, history_orders.item_id FROM (SELECT orders.order_id, orders.tstamp, orders.item_id FROM orders WHERE orders.tstamp BETWEEN '2010-01-03' AND '2010-01-09') AS history_orders UNION SELECT current_orders.order_id, current_orders.tstamp, current_orders.item_id FROM (SELECT orders.order_id, orders.tstamp, orders.item_id FROM orders WHERE orders.tstamp IS NULL) AS current_orders WHERE current_orders.order_id IN (SELECT orders.order_id FROM orders WHERE orders.tstamp BETWEEN '2010-01-03' AND '2010-01-09');
제공된 쿼리의 성능에 대해 궁금합니다. 테스트 결과를 공유 할 수 있습니까? –
곧 최종 해결책의 성능 향상에 대해보고 할 예정입니다. 이는 중요합니다. – machinatus