我有以下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)
当我运行查询时,它看起来像这样:
11月30日(今天和第3天)有记录。所以,
第0天(星期一)没有现金销售
第1天(星期二)$ 5049
第2天(周三)99美元
第3天(星期四/今天)没有显示任何内容。我无法弄清楚数据库中肯定有记录的原因但无法显示它们。我将不胜感激任何帮助。
答案 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()来测试除今天以外的天数的返回值。