2013年WEEK()故障组

时间:2013-01-04 02:24:04

标签: mysql sql

我不确定究竟发生了什么。

我有一个查询,它可以在一周内完成所有销售,但是会在一周内将故障分解为2,这是查询......

SELECT 
    ROUND(SUM(sell_price), 2) AS sell_price, 
    ROUND(SUM(buy_price/100*20), 2) AS fees, 
    ROUND(SUM(buy_price), 2) AS buy_price, 
    ROUND(SUM(sell_price/100*80 - buy_price), 2) AS margin, 
    time 
    FROM order_items 
    GROUP BY WEEK(FROM_UNIXTIME(time), 1) 
    ORDER BY WEEK(FROM_UNIXTIME(time), 1) DESC

这将输出以下内容

Sell Price      Fees    Buy Price   Margin  Date
44.01           4.46    22.30       12.91   31-12-2012
464.00          46.58   232.90      138.36  27-12-2012
313.82          31.80   159.01      92.06   10-12-2012
669.91          62.13   310.67      225.26  03-12-2012
265.88          25.57   127.84      84.87   02-12-2012
208.58          15.78   78.88       87.98   24-11-2012
176.90          16.32   81.59       59.93   01-01-2013

从表格中可以看出,从2013年12月31日开始的那一周与2013年的销售额相比,销售额也没有按降序返回,因为2013年的销售额应该显示在最重要的。

返回的表应该看起来像......

Sell Price      Fees    Buy Price   Margin  Date
220.2           20.78   103.90      72.84   31-12-2012
464.00          46.58   232.90      138.36  27-12-2012
313.82          31.80   159.01      92.06   10-12-2012
669.91          62.13   310.67      225.26  03-12-2012
265.88          25.57   127.84      84.87   02-12-2012
208.58          15.78   78.88       87.98   24-11-2012

2 个答案:

答案 0 :(得分:1)

分割值是正确的。 Week()函数返回周数而不是周一至周日值。

所以12/31/2012是在2012年的最后一周,而1/1/2013是在2013年的第1周。

请参阅Week()函数的SQL Fiddle with a demo

您可能需要查看WeekOfYear()函数,看看它是否适合您(See Demo):

select weekofyear(yourcol)
from yourtable

答案 1 :(得分:1)

也许这对你有用:

SELECT 
    ROUND(SUM(sell_price), 2) AS sell_price, 
    ROUND(SUM(buy_price/100*20), 2) AS fees, 
    ROUND(SUM(buy_price), 2) AS buy_price, 
    ROUND(SUM(sell_price/100*80 - buy_price), 2) AS margin, 
    DATE_SUB(FROM_UNIXTIME(time), INTERVAL (DAYOFWEEK(FROM_UNIXTIME(time)) - 1) DAY) AS fdow 
    FROM order_items 
    GROUP BY fdow
    ORDER BY fdow DESC