2012-10-19 100 views
0

我需要一些幫助來計算出正確的SQL語句。MySQL group by where day <= x

If've有一個表具有以下結構: ID,PRODUCT_ID,單位,時間戳

我wan't其中包含了全國各地每天的單位名單。產品每天最多有一項記錄。 所以我的第一次嘗試是:

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

通常這應該這樣做。但是有些時候有些產品沒有記錄。不過,這些單位仍在倉庫中,因此他們應該進行計算。

例如:

我們有3件產品。汽車,鋼筆和輪子。從二○一二年十月二十○日 記錄:

汽車=> 5 筆=> 20個 輪子=> 4

記錄從2012年10月21日 汽車=> 5個 輪子=> 6

我的查詢將給出以下結果:

2012年10月20日=> 29

2012年10月21日=> 11

但是我想,如果當天沒有產品的記錄,它應該使用該產品的記錄,這是最近的產品記錄。

所以它應該是:

2012年10月21日=> 31

我希望你明白我的需要。

回答

0
SELECT 
    dd.ddate AS day 
    , SUM(t.units) as overall_units 
FROM 
     (SELECT DISTINCT 
       product_id 
      FROM 
       tbl 
     ) AS dp 
    CROSS JOIN 
     (SELECT DISTINCT 
       DATE(timestamp) AS ddate 
      FROM 
       tbl 
     ) AS dd 
    JOIN 
     tbl AS t 
      ON t.id = 
       (SELECT 
         tt.id 
        FROM 
         tbl AS tt 
        WHERE 
         tt.product_id = dp.product_id 
        AND 
         tt.timestamp < dd.ddate + INTERVAL 1 DAY 
        ORDER BY tt.timestamp DESC 
        LIMIT 1 
       ) 
GROUP BY 
    dd.ddate ; 
+0

一起工作你是一個天才! ;) 謝謝! – netblognet

0

我想你應該看看DISTINCT()函數。 查詢可能類似於:SELECT DISTINCT(product_id), * FROM tbl ORDER BY timestamp DESC;使用PHP來循環查看結果並累積單位。

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 
+0

但這似乎並不與'GROUP BY DATE(timestamp)' – netblognet