一周中最好的一天

时间:2015-07-04 13:26:49

标签: mysql sql group-by sql-order-by

我有三列的表

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
...

我正在尝试查找一周中某些日期的{{1>} ordertotals 的记录。

换句话说,我希望看到最好的星期一(对于ordertotals的总和),最好的星期二和其他。

最后,我将在一周的七天内获得如下结果。

SUM

我尝试了这个查询,除了ActualDate之外它还有效;

 DailyTotal    | DayOfTheWeek | ActualDate

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

我在等你的解决方案。

1 个答案:

答案 0 :(得分: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()字符串不够大的可能性 - 可以调整)。但是,替代方案会导致更复杂的查询。

您的版本只会返回一个不确定的日期。