2014-10-15 5 views
1

가정하자 나는이 items의 판매를 추적하는 order_items 테이블 : 과거를 기반으로 재고 수량 고갈의 예상 비율을 반환 할 수 있습니다 내가 쿼리를 만들 것입니다 방법예측 속도

CREATE TABLE `items` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `stock` int(11) NOT NULL, 
    `price` decimal(8,2) NOT NULL, 
    `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE `order_items` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `order_id` int(10) unsigned NOT NULL, 
    `item_id` int(10) unsigned DEFAULT NULL, 
    `quantity` int(11) NOT NULL, 
    `price` decimal(8,2) NOT NULL, 
    `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`), 
    KEY `order_items_order_id_index` (`order_id`), 
    KEY `order_items_item_id_index` (`item_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

을 특정 기간 동안의 판매? 나는 또 다른 2 주 남아있는 수량이 없어야한다고 말해 것 질의에 있음을 넣어 얼마나 1이 (created_at 타임 스탬프 기준) 2 주 절반의 주식을 판매 item_id 경우 예를 들어

,?

단일 쿼리에서 시간대별로 고갈율을 그룹화 할 수 있습니까? 여기

이 내 바이올린입니다 :

SELECT Item_ID 
     ,SUM(Quantity) As TotalSold 
     ,DATEDIFF(MAX(Created_AT),MIN(Created_At)) AS Days_To_Sell 
FROM order_items 
GROUP BY Item_ID 

당신이 더 많은 것을 원하는 경우에 : 여기 당신에게 판매 된 항목 수를 가져옵니다 및 기본 쿼리의 http://sqlfiddle.com/#!2/c568f

+0

기본적으로 지난 X 주 동안 특정 품목에 대해 판매 된 판매 수량을 알고 현재 재고에 대해 해당 판매량을 사용하여 X 주 시간 내에 남아있을 수량을 확인하고자합니다. –

+0

@ 2unco 기본적으로 그렇습니다. 그리고 이들을 그룹화하여 추세를 분석 할 수 있습니다. – eComEvo

답변

0

가 지난 2 주에서 판매 한보다 2 이후에 얼마나 많은 주식을있을거야 얼마나 당신에게 모든 항목을 얻을 덜 기본 쿼리, 현재 주가는,이다 주이 최대로 유지하는 경우는 :

SELECT i.id, 
    i.stock AS current_stock, 
    COALESCE(SUM(o.quantity), 0) AS orders_last_2_weeks, 
    i.stock - COALESCE(SUM(o.quantity), 0) AS stock_after_2_weeks 
FROM items AS i 
LEFT OUTER JOIN order_items o 
    ON o.item_id = i.id 
    AND o.created_at > NOW() - INTERVAL 2 WEEK 
GROUP BY i.id 

http://sqlfiddle.com/#!2/08754/6

나는 지난 2 주에 종료 된 주문 없음 같은 바이올린에 날짜를 조정할했다.

+0

추신 : 방금 사용했던 변수를 꺼 냈습니다. 나는 그것을 시험 할 시간이 없었고 그것이 문제를 일으키는 것처럼 보였다. –

1

그것은 그들을 판매하는 데 걸린 얼마나 많은 일 단순한 고갈 비율보다는 복잡한 분석을 사용하면 달력 표를 통합하여 특정 기간 동안 모든 품목을 쉽게 분류 할 수 있지만 WEEK(), MONTH()과 같이 SELECTGROUP BY에 날짜 부분을 추가 할 수 있습니다 , e . TC

데모 : 여기 SQL Fiddle

+0

이러한 캘린더 테이블은 어떻게 구현됩니까? 나는 당신이 의미하는 것을 아주 시각화 할 수 없다. – eComEvo

+0

@eComEvo 날짜와 정보를 저장할 테이블을 만듭니다. 사용할 수있는 스크립트 (예 : http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=61519)를 찾을 수 있습니다. 그런 다음 당신은 당신의 판매를 데이트 테이블에 가입시키고 쉽게 'GROUP BY 1/4'또는 'WHERE weekday ='monday ''또는 다른 것을 할 수 있습니다. – Turch

+0

@eComEvo 캘린더 테이블은 날짜의 목록 일 뿐이며 휴일 및 기타 세부적인 플래그와 같은 다른 많은 필드가있을 수 있습니다. 일정 수준의 세부 정보가 필요하면 달력 테이블에 가입하는 것이 더 효율적일 수 있습니다. –