我有一张桌子,我想取各列的总和并以最高/最高的总和得出结果
这是我的桌子
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 |
+-----------+-------+
答案 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