3

我正在尝试获取过去 7 天的日期和总和(总计)。我正在尝试此代码并获取date NULL 和 daily_sale 0.00

SELECT
  date,
  IFNULL( SUM( total ), 0 ) AS daily_sale
FROM sales
WHERE date BETWEEN NOW()
    AND DATE_SUB(NOW(), INTERVAL 7 DAY)

我注意到如何获得日期和每日总销售额。我想得到结果

date       daily_sale    
2013-01-29 500.00
2013-01-28 500.00
2013-01-27 500.00
2013-01-26 500.00
...
2013-01-23 500.00
4

4 回答 4

2

您可以尝试interval - 7 day

SELECT  date, SUM(Coalese(total,0)) AS daily_sale
FROM yourtable
WHERE date BETWEEN NOW()  AND DATE_ADD(NOW(), INTERVAL -7 DAY)

不知道为什么between不起作用,请查看:

SQLFIDDLE 演示

select dates, sum(coalesce(daily_sale,0)) as total
from sales
where dates <= NOW()
and dates >= Date_add(Now(),interval - 7 day)
group by dates
;

|                          DATES | TOTAL |
------------------------------------------
| January, 23 2013 00:00:00+0000 |   500 |
| January, 24 2013 00:00:00+0000 |   500 |
| January, 27 2013 00:00:00+0000 |  1500 |
| January, 28 2013 00:00:00+0000 |  1000 |
| January, 29 2013 00:00:00+0000 |   500 |
于 2013-01-29T10:14:22.417 回答
0

来自 MySQL BETWEEN...AND 手册

expr BETWEEN min AND max

所以把它改成

    SELECT CURDATE( ),DATE_SUB( CURDATE() , INTERVAL 7 DAY ) AS weekEndDate, 
           `date` , SUM( COALESCE(`daily_sale`,0 ) ) AS weekly_sale
    FROM tbl_sale
    GROUP BY weekEndDate
    LIMIT 0 , 30

Working DEMO

笔记:

  • date是 mysql 保留关键字,所以将其包装在`
  • SUM 的语法是SUM(column_name),您的列名是daily_sales
于 2013-01-29T10:11:19.757 回答
0

如果第一个日期表达式需要是较低的,正如@diEcho 的回答所暗示的那样,那么您需要NOW()在表达式中创建第二个术语,而不是第一个。

于 2013-01-29T10:20:20.143 回答
0

您应该在 BETWEEN 命令中首先使用最低日期,因此 NOW() 必须在最后

SELECT
  date,
  IFNULL( SUM( total ), 0 ) AS daily_sale
FROM sales
WHERE date BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) and NOW()

或者如果您需要每天的统计数据:

SELECT
  DATE(`date`),
  IFNULL( SUM( total ), 0 ) AS daily_sale
FROM sales
WHERE date BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) and NOW()
group by DATE(`date`)
于 2013-01-29T10:20:20.720 回答