如何在MYSQL中获取当前周的日总数

时间:2019-06-29 05:32:50

标签: mysql

我需要有关如何在当前一周内每天进行总计的帮助。 这是示例结果: enter image description here


我可以当前总天数当前总周数,但是仍然不知道当前一周的日常工作。这是我的代码。

var newKey = firebase.database().ref().push().key;

var updates = {};
updates['/games/' + newKey] = name;
updates['/users/' + newKey] = name;

return firebase.database().ref().update(updates);

1 个答案:

答案 0 :(得分:1)

按日期分组:

Select 
  DATE(Start_Call_Time) as theday,
  count(*) as thecount
FROM logfile 
WHERE 
  Start_call_time > date_sub( curdate(), interval 7 day)
  AccountNO = account_NO
GROUP BY
  DATE(Start_Call_Time)

这将产生7列的两列,这是您要的数据,而不是您要的表格。为了将其分成7列,我们必须对其进行旋转。我们可以通过多种方式来执行此操作,而这是一种很好的方式,因为它可以在不同数据库中的各种情况下工作:

Select 
  COUNT(CASE WHEN DATEDIFF(DATE(Start_Call_Time), CURDATE() = 6 THEN 1 END) as six,
  COUNT(CASE WHEN DATEDIFF(DATE(Start_Call_Time), CURDATE() = 5 THEN 1 END) as five,
  COUNT(CASE WHEN DATEDIFF(DATE(Start_Call_Time), CURDATE() = 4 THEN 1 END) as four,
  COUNT(CASE WHEN DATEDIFF(DATE(Start_Call_Time), CURDATE() = 3 THEN 1 END) as three,
  COUNT(CASE WHEN DATEDIFF(DATE(Start_Call_Time), CURDATE() = 2 THEN 1 END) as two,
  COUNT(CASE WHEN DATEDIFF(DATE(Start_Call_Time), CURDATE() = 1 THEN 1 END) as one,
  COUNT(CASE WHEN DATEDIFF(DATE(Start_Call_Time), CURDATE() = 0 THEN 1 END) as zero,
  count(*) as total
FROM logfile 
WHERE 
  Start_call_time > date_sub( curdate(), interval 7 day)
  AccountNO = account_NO

对于每个日期列,它使用一种情况来询问呼叫日期与当前日期之间的差额是否是特定的天数-本质上是“呼叫是在星期二,昨天还是2天之前?”?是-返回1,否则返回null。每当返回任何非null值时,Count都会计数一次。这是将呼叫分配为在特定列中进行计数的方式。如果删除计数操作,则更有意义。这是您今天拨打两个电话和昨天拨打一个电话时看到的情况:

NULL, NULL, NULL, NULL, NULL, NULL, 1
NULL, NULL, NULL, NULL, NULL, NULL, 1
NULL, NULL, NULL, NULL, NULL, 1, NULL

最后一列是datediff零=今天。计算时,它们将折叠为单行:

0, 0, 0, 0, 0, 1, 2

请勿尝试将列标题称为日期;这是前端显示此数据的工作。数据库数据应具有固定名称的固定列数,如果零列显示星期一数据,则六列是上周二的数据

实际上,为了简化代码,您应该使用第一个查询,并让前端对数据进行转置。如果您对dB的设置不满意,请在一周中的几天后调用列,并始终在特定的日期运行报告