mysql按上午下午和晚上分组

标签 mysql datetime

我正在尝试从表中获取日志记录数据。我选择时间跨度的地方(“maandag”到“vrijdag”)。这得到了我想要的结果,但现在我得到的问题是每天只显示 3 次测量。

第一个是8点以后的第一个 第二个是14:00点后的第一个 第三个是20:00之后的第一个

我遇到的问题是测量时间不是恒定的。所以使用正则表达式来选择一天中的一部分是行不通的。 通过下面的查询,有时我每天也会得到 2 或 4 甚至更多的结果。这是因为测量之间的时间基本上是 2 小时,但这不是恒定的,因此第二天的测量是在同一时间进行的。

是否可以按一天中的某个时段分组? 或者还有什么解决办法?

data:
id datumTijd ph tbc temperatuur vbc gbc
1 2012-10-03 14:59:19 7.30.08 24.91 0.02 0     
1 2012-10-03 16:47:38 7.33.07 22.15 0.12 0
3 2012-10-03 17:03:06 7.31.09 23.23 0.05 0


query:
SELECT N.name, D.datumTijd, ROUND(D.gbc,2), ROUND(D.vbc,2), ROUND(D.tbc,2),ROUND(D.ph,2), ROUND(D.temperatuur,1)  
FROM METING.Name N, METING.Data D 
Where D.datumTijd BETWEEN "'+maandag+' 00:00:00" AND "'+vrijdag+' 23:59:59"  
AND N.id = D.id AND D.datumTijd 
AND D.datumTijd REGEXP "0[78]:..:..|1[34]:..:..|2[12]:..:.."';
ORDER BY N.name, D.datumTijd 

最佳答案

您可以像这样将结果分组到 3 个不同的时期。然后,您可以对度量值使用聚合函数(SUM、MIN、MAX)。

SELECT   DATE(D.datumTijd),
         CASE WHEN TIME(D.datumTijd) BETWEEN '08:00:00' AND '14:00:00' THEN 1
              WHEN TIME(D.datumTijd) BETWEEN '14:00:00' AND '20:00:00' THEN 2
              WHEN TIME(D.datumTijd) BETWEEN '20:00:00' AND '24:00:00' THEN 3
         END as period
...
GROUP BY DATE(D.datumTijd),
         CASE WHEN TIME(D.datumTijd) BETWEEN '08:00:00' AND '14:00:00' THEN 1
              WHEN TIME(D.datumTijd) BETWEEN '14:00:00' AND '20:00:00' THEN 2
              WHEN TIME(D.datumTijd) BETWEEN '20:00:00' AND '24:00:00' THEN 3
         END

关于mysql按上午下午和晚上分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13806187/

相关文章:

c# - 使用当前线程区域性与两位数的月份和日期格式化日期?

mysql - 何时使用日期时间或时间戳

javascript - 使用 Moment.js 或 Moment 时区,匹配标准时间和夏令时

sql - TSQL 将 HHMMSS 的 VARCHAR 转换为 TIME

php - 将 php 文件中的代码从 mysql 更改为 mssql

mysql - 查询中函数的 IN 运算符的替代或替换 IN 运算符?

php - 将用户输入的日期与MySQL日期时间字段进行比较

MySQL从表中每个不同外键的10行中选择id

java - 插入另一个 IP 的命令被拒绝

python - 给 pandas 日期列序号值