我在对某些数据集进行分组时遇到一些麻烦。这是我的查询和查询结果。
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/