我正在尝试将数据库的记录放到桌子上,但是我正在努力,因为我必须在工作日将它们分开,并且在每个工作日它们可以在早晨,下午,晚上或整天。
在上图中,我想要显示信息。澄清
第1项 - 工作日(星期一 - 2014年10月27日)等等。
然后在第二列(Manhã= Morning),我想展示那天早上插入的所有内容。
(例如:星期一早上,可以有4个条目,但在下午它只能有1个,而且在夜晚只有0个。)
该表上方是一周中每天的webgrid结果。我所做的是:
"SELECT DISTINCT dataOcorrencia FROM relatoriosSemanais WHERE semana= '43'"
并把它放在一个网页上,从第43周开始,我就可以得到所有工作日,是的,这一周将是动态的。
但现在我不知道如何获得记录,就像我告诉你们的那些人一样。
我的数据库有一周,一天(早上,下午,晚上,下午),一天。
不知道你是否能理解我的问题。
27 26/10/2014 12:30 26/10/2014 13:58 Mobile Outros Alerta CC3 Clientes a ficar com carregamentos em processamento. FECHADO 43 Sim Manhã Criticidade Muito Elevada Relatório SI 26-10-2014
28 26/10/2014 09:39 26/10/2014 11:45 Serviços Online Área de Cliente Alerta CC3 Área de Cliente indisponível FECHADO 43 Sim Tarde Criticidade Muito Elevada Relatório SI 26-10-2014
29 26/10/2014 09:39 26/10/2014 11:45 Serviços Online Área de Cliente Alerta CC3 Área de Cliente indisponível FECHADO 43 Sim Manhã Criticidade Regular Relatório SI 26-10-2014
答案 0 :(得分:1)
要逐周工作,您需要一个简单的公式,将任何DATETIME
值转换为前一个星期日的日期。这可以按如下方式完成
FROM_DAYS(TO_DAYS(record_date) -MOD(TO_DAYS(record_date) -1, 7))
(如果您的周数从星期一开始,请使用-2
代替-1
。)
为什么这样?因为您可以使用此类WHERE
子句选择一周的数据。
WHERE record_date >= FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7)) - INTERVAL 1 WEEK
AND record_date < FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7))
使用该设计模式,我建议您尝试使用这样的设置来设置表格。您还没有告诉我们您的列的名称,因此无法为您提供完美的查询。
SELECT DATE_FORMAT(DATE(record_date),'%W') AS weekday,
SUM(Sim = 'Sim Manhã') AS `Manhã`,
SUM(Sim = 'Sim Tarde') AS `Tarde`,
SUM(Sim = 'Sim Noite') AS `Noite`,
SUM(Sim = 'Sim Todo o Dia') AS 'Todo o Dia'
FROM dataOcorrencia
WHERE record_date >= FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7)) - INTERVAL 1 WEEK
AND record_date < FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7))
GROUP BY DATE(record_date)
这是有效的,因为如果列Sim = 'Sim Manhã'
的值为1
,则值Sim
为'Sim Manhã'
,否则为零。因此,对1
值求和会计算条件为真的行。
还有一件事:DATE_FORMAT(...'%W')
会产生星期几的名字。如果您在打开连接后立即向MySQL发出此命令,那么您将使用葡萄牙语获取这些日期名称。
SET lc_time_names = 'pt_BR'