2015-07-04 35 views
4

我有表的一天有三列周最佳

order; 
orderID | ordertotal | datetime 

1  | 100.00  | 2015-03-01 17:48:14 
2  | 150.00  | 2015-05-10 02:33:20 
3  | 5982.23 | 2015-06-11 17:11:30 
... 

我試圖找到記錄SUM ordertotals一週的日子。

換句話說,我想看到最好的星期一(最好的星期一),最好的星期二和其他人。

最後我會得到一個像下面這樣的一週七天的結果。

DailyTotal | DayOfTheWeek | ActualDate 

    7500  | Monday  | 2015-03-01 
    8000  | Tuesday  | 2015-05-10 
    5000  | Wednesday | 2015-06-11 
... 

我試過這個查詢,它的工作除了ActualDate;

SELECT 
    MAX(o2.dailytotal) AS DailyTotal, 
    DATE_FORMAT(o2.datetime2, '%W') AS DayOfTheWeek, 
    o2.datetime2 AS ActualDate 
FROM 
    (
     SELECT 
      SUM(s1.ordertotal) AS dailytotal, 
      DATE(s1.datetime) AS datetime2 
     FROM 
      order AS o1 
     GROUP BY 
      DATE(o1.datetime) 
    ) AS o2 
GROUP BY DATE_FORMAT(o2.datetime2, '%W') 
ORDER BY 1 DESC 

我在等待您的解決方案。

回答

3

這就是substring_index()/group_concat()伎倆可能是快遞查詢的最佳方式的情況下:

SELECT MAX(o2.dailytotal) AS DailyTotal, 
     DATE_FORMAT(o2.datetime2, '%W') AS DayOfTheWeek, 
     SUBSTRING_INDEX(GROUP_CONCAT(o2.datetime2 ORDER BY o2.dailytotal DESC), ',', 1) AS ActualDate 
FROM (SELECT DATE(s1.datetime) AS datetime2, 
      SUM(s1.ordertotal) AS dailytotal  
     FROM `order` o1 
     GROUP BY DATE(o1.datetime) 
    ) o2 
GROUP BY DATE_FORMAT(o2.datetime2, '%W') 
ORDER BY DailyTotal DESC; 

沒有與此問題(如日期轉換爲字符串和的可能性中間group_concat()字符串不夠大 - 可以調整)。但是,替代方案會導致更復雜的查詢。

您的版本只是返回一個不確定的日期。