0

正しいSQLステートメントを理解するのに助けが必要です。

次の構造のテーブルがある場合:id、product_id、units、timestamp

1日あたりのユニット全体を含むリストは必要ありません。製品には、1日あたり最大1つのレコードがあります。だから私の最初の試みは:

SELECT 
    DATE(timestamp) as day, SUM(units) as overall_units 
FROM 
    tbl 
GROUP BY 
    DATE(timestamp);

通常、これでうまくいくはずです。しかし、製品の記録がない日もあります。それにもかかわらず、ユニットはまだ倉庫にあるので、計算に含める必要があります。

例えば:

3つの製品があります。車、ペン、ホイール。2012-10-20の記録:

車=>5ペン=>20ホイール=>4

2012-10-21車の記録=>5輪=>6

私のクエリでは、次の結果が得られます。

2012-10-20 => 29

2012-10-21 => 11

ただし、その日の製品のレコードがない場合は、過去に最も近いこの製品のレコードを使用する必要があります。

したがって、次のようになります。

2012-10-21 => 31

私のニーズをご理解いただければ幸いです。

4

3 に答える 3

1
SELECT 
   MAX (DATE(timestamp) ) as day, SUM(units) as overall_units 
FROM tbl

アップデート ::

 SELECT max(day),sum(ou) from  
     (  select DATE(timestamp) as day, SUM(units) as ou 
        FROM tbl 
        GROUP BY   DATE(timestamp);
      )

内部qryが返されます

2012-10-20 , 29
2012-10-21 , 11

そして最後のクエリが返されます

 2012-10-21 , 40
于 2012-10-19T09:49:59.337 に答える
0

機能を検討する必要があると思いますDISTINCT()。クエリは次のようになりSELECT DISTINCT(product_id), * FROM tbl ORDER BY timestamp DESC;ます。PHP を使用して結果をループし、単位を累積します。

于 2012-10-19T09:46:36.423 に答える