2014-03-30 4 views
0

데이터 테이블은 다음과 같은 방식으로;MySQL 재고 취득 후 계산 방법

Firm | PartID | StockCount |  Date | Type 
----------------------------------------------------------- 
    1 |  71 |   5 | 2014-02-01 | Incoming Invoice 
    1 |  71 |   -1 | 2014-02-09 | Send Invoice 
    1 |  71 |   10 | 2014-02-13 | Stocktaking (!!! Of the Depot.) 
    1 |  71 |   -1 | 2014-02-21 | Send Invoice 
    1 |  71 |   5 | 2014-02-28 | Incoming Invoice 

이 테이블은 실제로 움직일 수있는 테이블을 허구로 묘사 한 것입니다. 상점, 구매 및 판매 청구서에 포함 된이 테이블의 계산에는 다음이 포함됩니다. 이 방법으로 창고, 창고 및 창고에서 진입하는 것은 실제로 계산 된 테이블에 수집됩니다. 센서스를 만든 순간부터 주가는 명시된 금액 이상으로 계산되어야합니다. 문제가 어디로 올지.

다음 결과는 어떻게 얻을 수 있습니까?

Firm | PartID | StockCount |  Date | Type 
------------------------------------------------------- 
    1 |  71 |   14 |  NULL | NULL 
+0

당신은, 첫째 또는 PartID 또는 두 가지 모두에 의해 그룹 중 하나를 필요가 * 불분명 생각 * 그 방법 StockCount = 14 (합계가 아닙니다). –

답변

0

더 일반적으로 "인벤토리를 수행하는"것으로 의심되는 "재고 확보"이후에 재고 합산을 원하는 것 같습니다. 더 재고 조사 기록이 없을 수 있습니다 경우

select Firm, PartId, sum(StockCount) as StockCount, NULL as Date, NULL as Type 
from table t 
where Date >= (select max(Date) 
       from table t2 
       where t2.Firm = t.Firm and 
        t2.partid = t.partid and 
        t2.type = 'Stocktaking' 
      ) 
group by Firm, Partid; 

, 다음 left join 접근 방식으로 이동 :

select Firm, PartId, sum(StockCount) as StockCount, NULL as Date, NULL as Type 
from table t left join 
    (select Firm, PartId, max(Date) as maxDate 
     from table t 
     where t2.type = 'Stocktaking' 
     group by Firm, PartId 
    ) as tfp 
    on t.Firm = tfp.Firm and t.PartId = tfp.PartId and t.Date >= tfp.MaxDate 
group by t.Firm, t.PartId; 
+0

그래, 나는 그 문제를 완전히 설명 할 수 없다. 그러나 주제에 관심을 가져 주셔서 감사합니다. 이 테이블은 실제로 움직이는 테이블의 소설화 된 묘사입니다. 상점, 구매 및 판매 청구서에 포함 된이 테이블의 계산에는 다음이 포함됩니다. 이 방법으로 창고, 창고 및 창고에서 진입하는 것은 실제로 계산 된 테이블에 수집됩니다. 센서스를 만든 순간부터 주가는 명시된 금액 이상으로 계산되어야합니다. 문제가 어디로 올지. 내 문제를 해결하는 방법 보여주기. 감사합니다. –

0

것은 내가 바로 그것을 읽고 있어요 경우 :

SELECT firm, partid, count(stockCount) as stock_total 
FROM yourtable 
WHERE firm = 1 
AND partid = 71 
당신은 여러 부분을 선택하려면 그룹화해야합니다

, 뭔가 같은 :

SELECT firm, partid, count(stockCount) as stock_total 
FROM yourtable 
WHERE firm = 1 
GROUP BY partid 
0

시도
SELECT Firm, 
     PartID, 
     Count(StockCount), 
     Date AS NULL, 
     TYPE AS NULL 
FROM TABLE 
GROUP BY Firm, 
     PartID 
0

문제의 설명은 unc입니다. 학습하지만, 나는 그것이 당신이 원하는 것이라고 생각합니다.

SELECT Firm, PartID, SUM(StockCount) as StockCount, NULL as Date, NULL as Type 
FROM tbl T1 
WHERE Date >= (SELECT Date FROM tbl T2 
        WHERE T2.Type = Stocktaking 
        AND T1.Firm =T2.Firm 
        AND T1.PartId = T2.PartId 
      ) 
GROUP BY Firm, PartID