2

何が起こったのか正確にはわかりません。

私は、1 週間を 2 週間に分けてわずかに誤動作した 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, 
    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 年に行われた売上から 31/12/12 から始まる週が切り取られています。また、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
4

2 に答える 2

1

値の分割は正しいです。このWeek()関数は、月曜日から日曜日の値ではなく、週番号を返します。

201212/31/2012年の最終週と1/1/20132013 年の第 1 週も同様です。

関数のデモでSQL Fiddle を参照してくださいWeek()

関数を調べて、WeekOfYear()それが機能するかどうかを確認することをお勧めします (デモを参照)。

select weekofyear(yourcol)
from yourtable
于 2013-01-04T02:30:31.290 に答える
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
于 2013-01-04T02:35:28.120 に答える