mysql - 将日期时间分组在范围内

标签 mysql datetime group-by

我在对某些数据集进行分组时遇到一些麻烦。这是我的查询和查询结果。

SELECT COUNT(*),salarie_id, created_at
FROM enregistrement 
GROUP BY salarie_id, created_at

我的观点是以+/- 3秒的间隔对相似的created_at行进行分组。我没有管理它,即使使用INTERVAL,按照HAVING这样的标准 , 其中...之间

如何对这些行进行分组以获得计数结果,例如 36 (33+3),如图所示?

没有找到任何合适的解决方案...如果您需要一些其他信息,请告诉我。

<小时/>

更新 1:看起来 @fancypants 解决方案是正确的。

SELECT COUNT(*),salarie_id, DATE_FORMAT(created_at, CONCAT('%Y-%m-%d %H:%i:', LEFT(RIGHT(created_at, 2), 1), RIGHT(created_at, 1) % 3)) AS 'date'
FROM enregistrement 
GROUP BY salarie_id, DATE_FORMAT(created_at, CONCAT('%Y-%m-%d %H:%i:', LEFT(RIGHT(created_at, 2), 1), RIGHT(created_at, 1) % 3))

最佳答案

SELECT COUNT(*),salarie_id, created_at
FROM enregistrement 
GROUP BY salarie_id, 
DATE_FORMAT(created_at, CONCAT('%Y-%m-%d %H:%i:', LEFT(RIGHT(created_at, 2), 1), 
CASE WHEN RIGHT(created_at, 1) BETWEEN 1 AND 4 THEN 0
WHEN RIGHT(created_at, 1) BETWEEN 5 AND 7 THEN 1
ELSE 2 END
));

您可以使用DATE_FORMAT()将日期时间/时间戳列设置为某些形状。 根据您的情况,我们使用指定格式

CONCAT('%Y-%m-%d %H:%i:', LEFT(RIGHT(created_at, 2), 1), RIGHT(created_at, 1) % 3))

也就是说,我们取年、月、日、小时、分钟。然后我们将日期格式字符串与十秒的幂连接起来。

例如,您有这一秒:

21
33
36
40

然后我们用 LEFT(RIGHT(created_at, 2), 1) 得到 2、3、3 和 4。我们通过 RIGHT(created_at, 1) 得到 1、3、6 和 0。然后您只需使用 CASE WHEN 将它们放入自定义组中即可。

关于mysql - 将日期时间分组在范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30184303/

相关文章:

java连接不上mysql数据库

mysql - 批处理 mysql 转储 - 根据 SELECT 排除某些表

python - 如何在支持多种数据格式的 Pandas 中合并日期?

mysql - 如何计算与不同用户关联的销售额总和

c# - 如何在 LINQ 中执行分组并获得 Iqueryable 或自定义类对象?

mysql - 如何修复 InnoDB 损坏,从创建中锁定表名(errno : -1) on AWS RDS?

php - 如何在heroku上上传PHP和MySQL Web应用程序?

python - 在 Python、postgresql 中将字符串转换为 DateTime 到 UTC 格式

Python-将一个时间段分割成多个固定长度的时间段

sql - Postgres : get top n occurrences of a value within each group