2014-10-20 150 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