【问题标题】:Put results on a table, divided by all days of the week将结果放在表格上,除以一周中的所有天数
【发布时间】:2014-10-26 17:18:02
【问题描述】:

我正在尝试将数据库的记录放到一个表中,但是我很挣扎,因为我必须将它们划分为工作日,并且每个工作日它们可以是早上、下午、晚上或全天。

在上面的图片中,这是我想要显示信息的方式。澄清

第 1 项 - 工作日(星期一 - 2014 年 10 月 27 日)等等。

然后在第二列(Manhã = Morning)我想显示那天早上插入的所有内容。

(例如:周一早上可以有4条,下午只能有1条,晚上只能有0条。)

该表上方是一周中每一天的网络网格结果。我所做的是:

"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

【问题讨论】:

  • 你如何定义早上、下午和晚上的界限?你能从你的数据库中展示一些示例行吗?
  • 我有一列有当天的时段。
  • 当用户插入数据库时​​,我有一个下拉菜单,包括早上、下午、晚上、整天
  • 我可以在 30m 内给出示例,现在不在电脑上。
  • 我已经从我的数据库中放了一些行

标签: c# mysql date webmatrix


【解决方案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ã',则值 Sim = 'Sim Manhã'1,否则为零。因此,对 1 值求和会计算条件为真的行。

还有一件事:DATE_FORMAT(...'%W') 产生星期几的名称。如果您在打开连接后立即向 MySQL 发出此命令,您将获得葡萄牙语版本的日期名称。

SET lc_time_names = 'pt_BR'

【讨论】:

  • Ollie Jones,非常感谢您的帮助,让我走上了正轨,感谢您的解释和您的时间。
猜你喜欢
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多