mysql查询如何显示当天每天的现金总销售额

时间:2017-11-29 23:16:48

标签: mysql sql

我有以下mysql查询,显示当天每周的现金总销售额。

SELECT  
  sum(Price) as totalprice,
  WEEKDAY(CreatedOn) as dayno,
  DATE(CreatedOn) as CreatedOn,
  AgentID  
FROM records
WHERE CreatedOn BETWEEN (CURDATE()-WEEKDAY(CURDATE())) AND CURDATE()
GROUP BY DATE(CreatedOn)

当我运行查询时,它看起来像这样:

enter image description here

11月30日(今天和第3天)有记录。所以,

第0天(星期一)没有现金销售

第1天(星期二)$ 5049

第2天(周三)99美元

第3天(星期四/今天)没有显示任何内容。我无法弄清楚数据库中肯定有记录的原因但无法显示它们。我将不胜感激任何帮助。

2 个答案:

答案 0 :(得分:2)

CURDATE()是今天的日期,但是在00:00:00 + 0000000

将更高的日期“推高”1天,并避免在日期/时间范围之间使用:

WHERE CreatedOn >= date_sub(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) 
AND CreatedOn < date_add(CURDATE(), INTERVAL 1 DAY)


select date_sub(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) 
     , date_add(CURDATE(), INTERVAL 1 DAY)

答案 1 :(得分:2)

查询中的条件当前在今天午夜或之前指定,因此今天午夜之后的所有行都将被排除。

我认为您打算在第二天的午夜之前指定CreatedOn。

我还建议你不要从日期/日期时间中减去一个整数值,而是使用INTERVAL语法

WHERE CreatedOn >= CURDATE() - INTERVAL WEEKDAY(CURDATE()) DAY
  AND CreatedOn <  CURDATE() + INTERVAL 1 DAY

要在将它们包含在查询中之前测试这些表达式,我们可以运行SELECT语句:

 SELECT CURDATE() - INTERVAL WEEKDAY(CURDATE()) DAY
      , CURDATE() + INTERVAL 1 DAY

并验证这些表达式是否返回了我们期望的值,即我们想要使用的值。对于测试,我们可以用日期值替换CURDATE()来测试除今天以外的天数的返回值。