像这样将返回指定的结果:
SELECT c.customer_id AS `Customer_ID`
, d.day AS `Day`
, COUNT(1) AS `Total(COUNT)`
FROM (SELECT 1 AS customer_id) c
CROSS
JOIN (SELECT 1 AS `dow`, 'Sunday' AS `day`
UNION ALL SELECT 2, 'Monday'
UNION ALL SELECT 3, 'Tuesday'
UNION ALL SELECT 4, 'Wednesday'
UNION ALL SELECT 5, 'Thursday'
UNION ALL SELECT 6, 'Friday'
UNION ALL SELECT 7, 'Saturday'
) d
LEFT
JOIN mytable t
ON t.customer_id = c.customer_id
AND t.c_date >= DATE(NOW()) + INTERVAL -7 DAY
AND t.c_date < DATE(NOW())
AND DAYOFWEEK(t.c_date) = d.dow
GROUP BY c.customer_id, d.dow
ORDER BY c.customer_id, d.dow
注:
我们需要返回七 “日” 的值(周日至周六一个行源),否则,当那天没有行时,我们不能从表中返回当天的“零”计数。
我们需要定义“当前周”。上面的查询使用当前日期,并减去七天。如果此查询在星期三运行,我们将在星期三至星期二前七天收到。如果你的“本周”的定义比不同,则使用产生在报告期开始时的一个DATETIME值,而本报告期后的第一秒(代替DATE(NOW)) + INTERVAL -7 DAY
和DATE(NOW))
)表达
随访
寻址评论:“只拿到周一的记录,所有其他人都不对”
请明白这一点:StackOverflow上是不查询和代码写作服务。上述 答案图示查询模式的例子,满足查询需要克服的最大驼峰之一:
由于上面提到的答案(在说:)的那条线下面),我们需要一个“当前周”的实际规范。当“今日”是星期二时,这意味着什么,'2017-06-20'
。确定了哪些日期范围?如果今天是星期五或星期天,这意味着什么?
一旦我们有了定义,我们就可以编写表达式,它将返回开始和结束日期值。
要另外一种方式,...把查询的这个部分:
AND t.c_date >= DATE(NOW()) + INTERVAL -7 DAY
AND t.c_date < DATE(NOW())
并更换有这样的事情:
AND t.c_date >= '2017-06-14'
AND t.c_date < '2017-06-21'
或像这样:
AND t.c_date >= '2017-06-18'
AND t.c_date < '2017-06-25'
什么日期文字可用于查询返回th预期的结果?因此,查询不是“只得到星期一的记录,所有其他人都不对”[原文如此]。
我们可以使用一个简单的SELECT语句来测试表达式。我们可以使用用户定义的变量代替NOW()来测试NOW()的各种可能的值。例如:
SET @tday = '2017-06-21 12:34' ;
SELECT DATE(@tday) - INTERVAL DAYOFWEEK(@tday)-1 DAY AS sd
, DATE(@tday) - INTERVAL DAYOFWEEK(@tday)-8 DAY AS ed
一旦我们返回“开始”和范围的“结束”的表达,我们可以利用那些在另一个查询。像上面的一个...
AND t.c_date >= DATE(NOW()) - INTERVAL DAYOFWEEK(NOW())-1 DAY
AND t.c_date < DATE(NOW()) - INTERVAL DAYOFWEEK(NOW())-8 DAY
值得一读https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users – RiggsFolly
你有没有试图写一个查询呢? – RiggsFolly
请阅读[我可以询问哪些主题](http://stackoverflow.com/help/on-topic) 和[如何提出一个好问题](http://stackoverflow.com/help/how-to - 问) 和[完美的问题](http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) 以及如何创建[最小,完整和可验证示例] (http://stackoverflow.com/help/mcve) ** SO不是**免费的编码服务___我们尝试修复您的代码,我们不写你的代码____ – RiggsFolly