按日期选择最高/最高的总和组

时间:2019-12-03 19:09:14

标签: mysql sql

我有一张桌子,我想取各列的总和并以最高/最高的总和得出结果

这是我的桌子

sales
+-------------+----------+--------------------------------+
| package_id  |  amount  |          datesales             |
+-------------+----------+--------------------------------+
|     123     |    100   |  2019-12-01 09:18:19.000000    |
|     123     |    100   |  2019-12-01 09:18:19.000000    |
|     123     |    100   |  2019-12-02 09:18:19.000000    |
|     123     |    200   |  2019-12-02 09:18:19.000000    |
+-------------+----------+--------------------------------+

datesales column is in timestamp

这是我的查询

SELECT max(AMOUNTSUM) AS amount42
                    FROM
                    (
                        SELECT SUM(AMOUNT) AS AMOUNTSUM
                        FROM sales
                        where date(datesales) <= curdate() and
                        date(datesales) >= curdate() - interval 6 day
                        and package_id = 123
                        group by datesales
                    )

我有4个条目,日期是今天和昨天,所以我希望根据时间戳中的datesales列获得最高/最高的金额

datesales(今天)的总和为200,而datesales(昨天)的总和为300, 我想获得300结果,但我不知道我的查询出了什么问题

预期结果

+-----------+-------+
| yesterday |  300  |
+-----------+-------+

我得到的结果

+-----------+-------+
| yesterday |  200  |
+-----------+-------+

3 个答案:

答案 0 :(得分:3)

您需要按日期而不是日期/时间进行汇总。您还可以消除子查询:

select sum(AMOUNT) AS AMOUNTSUM
from sales
where datesales < curdate() + interval 1 day and
      datesales >= curdate() - interval 6 day and
      package_id = 123
group by date(datesales)
order by amountsum desc
limit 1;

请注意,我更改了日期比较,以使它们易于索引。

答案 1 :(得分:2)

我会这样:

SELECT MAX(v.amountsum) AS amount42
  FROM (
         SELECT DATE(s.datesales)  AS sales_dt
              , SUM(s.amount)      AS amountsum
           FROM sales s
          WHERE s.package_id   = 123
            AND s.datesales   >= CURDATE() + INTERVAL -6 DAY
            AND s.datesales    < CURDATE() + INTERVAL +1 DAY
          GROUP
             BY DATE(s.datesales)
       ) v

答案 2 :(得分:0)

由于您要按日期销售额进行分组,因此无需总计金额,因为group by仍将总计金额。

删除SUM(AMOUNT),然后选择金额。

 SELECT amount
 FROM sales
 where date(datesales) <= curdate() and
 date(datesales) >= curdate() - interval 6 day 
 and package_id = 123
 group by datesales