2014-10-20 152 views
0

希望有人能幫助我,這真的是瞎了眼睛。MySQL基於兩個時間戳列獲取結果集

我有一個表格,用於存儲用戶選擇的產品,並在該表格中存儲訂單和拾取以及取件時間。因此structur是索引(PRIMARY INT),ordernr(INT),ordertime(TIMESTAMP),productid(INT),拾取(TINYINT),拾取時間(TIMESTAMP)。

現在我很想得到一個圖表的結果集,即說,日期,有序產品的數量和拾取的產品數量,組和按日期排序。我現在的問題是我得到的數字幾乎是正確的,但是拾取數據被計入有序數,我似乎無法理解這一點。

SELECT (case when pickedup = '1' then DATE(order_detail.pickeduptime) else DATE(order_detail.ordertime) end) AS x,COUNT(productid) AS y,SUM(case when pickedup = '1' then 1 else 0 end) AS z FROM order_detail WHERE productid = '127' AND YEAR(`ordertime`) = YEAR(NOW()) GROUP BY x ORDER BY x asc 

任何幫助將大大appriciated。 :-)

更新:

1 index int(11)   AUTO_INCREMENT Primary 
2 ordernr int(11)   
3 productid int(11)  
4 price int(11)  
5 ordertime timestamp CURRENT_TIMESTAMP 
6 pickedup tinyint(4) 0 
7 pickeduptime timestamp 0000-00-00 00:00:00 

如何表如下。

+0

請顯示您的表格,colums的含義,並告訴我們您要製作的圖表。 – 2014-10-20 09:40:23

回答

0

,可以幫助的第一件事是正確的SQL的格式化:

SELECT 
    (CASE 
    WHEN pickedup = '1' THEN DATE(pickeduptime) 
    ELSE DATE(ordertime) 
    END) AS x, 
    COUNT(productid) AS y, 
    SUM(CASE 
     WHEN pickedup = '1' THEN 1 
     ELSE 0 
     END) AS z 
FROM 
    order_detail 
WHERE 
    productid = '127' AND 
    YEAR(ordertime) = YEAR(NOW()) 
GROUP BY x 
ORDER BY x ASC 

現在我需要找出你正在嘗試做什麼。這是真正的問題開始的地方。目前還不清楚你是否重複使用表格中的行來獲取皮卡。對不起,我幫不了你。你的SQL雖然很奇怪。對於這樣簡單的事情,您不需要使用兩個CASE命令。

我也無法理解你的SQL,按照來自兩列的日期分組嗎?

經過仔細閱讀,我想我開始明白你想要什麼。你想知道每個日期有多少產品被訂購和取貨。我不會試圖用一個SQL命令來做到這一點,而是使用兩個。兩行,兩條SQL命令。 :-)

首先簡單:有多少種產品,其中有序,分組和按日期排序:

SELECT 
    DATE(ordertime) as orderdate, 
    COUNT(productid) AS quantity 
FROM 
    order_detail 
WHERE 
    productid = '127' AND 
    YEAR(ordertime) = YEAR(NOW()) 
GROUP BY orderdate 
ORDER BY orderdate ASC 

現在還沒有拿起訂購的產品:

SELECT 
    DATE(ordertime) as orderdate, 
    COUNT(productid) AS quantity 
FROM 
    order_detail 
WHERE 
    productid = '127' AND 
    YEAR(ordertime) = YEAR(NOW()) AND 
    pickedup != '1' 
GROUP BY orderdate 
ORDER BY orderdate ASC 

和現在已經拿起產品,還是上排序訂單日期:

SELECT 
    DATE(ordertime) as orderdate, 
    COUNT(productid) AS quantity 
FROM 
    order_detail 
WHERE 
    productid = '127' AND 
    YEAR(ordertime) = YEAR(NOW()) AND 
    pickedup = '1' 
GROUP BY orderdate 
ORDER BY orderdate ASC 

而這裏的同排序日期:

SELECT 
    DATE(pickeduptime) as pickedupdate, 
    COUNT(productid) AS quantity 
FROM 
    order_detail 
WHERE 
    productid = '127' AND 
    YEAR(ordertime) = YEAR(NOW()) AND 
    pickedup = '1' 
GROUP BY pickedupdate 
ORDER BY pickedupdate ASC 

現在,您可以使用其中任何一種方法在圖表中繪製一條線。

如果你堅持一個查詢,你可以用這一個:

SELECT 
    DATE(ordertime) as orderdate, 
    SUM(pickedup) AS pickedup_quantity, 
    SUM(1-pickedup) AS not_pickedup_quantity 
FROM 
    order_detail 
WHERE 
    productid = '127' AND 
    YEAR(ordertime) = YEAR(NOW()) 
GROUP BY orderdate 
ORDER BY orderdate ASC 

注意,一切必須由一個日期排序。

+0

感謝您的回覆。我很抱歉,但是我的mysql技能缺乏,這就是我從中得到的,我知道它並不是非常好。 對於每個訂購的產品,我正在使用一行,並在顧客從商店中挑選時更新拾取值和拾取時間。 – user1393970 2014-10-20 09:45:55

+0

啊,我明白了,現在我明白這是如何工作的。你能解釋你想在你的圖表中顯示什麼嗎?我需要知道如何在圖表中表示有序和拾取的產品。混合但在日期訂購?這對我來說毫無意義。 – 2014-10-20 09:51:32

+0

Im使用Morris.js並且想要一個圖表,其中日期爲x軸,y軸爲2行,當天訂購的產品數量以及該日期採集的產品數量。 http://jsbin.com/uqawig/441/embed?js,output – user1393970 2014-10-20 09:57:08

0

不知道到底什麼是你的問題,但我想你已經有了一個語法錯誤:忘了在「案例」的「結束」後,在MySQL Reference

+0

我的問題是,我收到了一個清單,但它不正確,拾取被計入「y」變量中,但它應該是這樣的: 日期,此日期訂購的產品數量,此產品的拾取數量日期。 – user1393970 2014-10-20 09:32:25