mysql-如何每天对unix时间进行分组?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-如何每天对unix时间进行分组?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2138字,纯文字阅读大概需要4分钟。
内容图文
我有一张这样的桌子:
// requests
+----+----------+-------------+
| id | id_user | unix_time |
+----+----------+-------------+
| 1 | 2353 | 1339412843 |
| 2 | 2353 | 1339412864 |
| 3 | 5462 | 1339412894 |
| 4 | 3422 | 1339412899 |
| 5 | 3422 | 1339412906 |
| 6 | 2353 | 1339412906 |
| 7 | 7785 | 1339412951 |
| 8 | 2353 | 1339413640 |
| 9 | 5462 | 1339413621 |
| 10 | 5462 | 1339414490 |
| 11 | 2353 | 1339414923 |
| 12 | 2353 | 1339419901 |
| 13 | 8007 | 1339424860 |
| 14 | 7785 | 1339424822 |
| 15 | 2353 | 1339424902 |
+----+----------+-------------+
我想根据分开的日期对unix_time列进行分组.实际上,我正在尝试针对特定用户使用此功能:
如您所见,我需要一个用户的拖车号:
>在请求表中有用户足迹的所有天数
>最大连续天数
我怎样才能做到这一点?
实际上,我可以使用WHERE id_user =:id选择用户的行.而且我可以通过SUM()计算天数.通过使用MAX(),我可以计算最大连续范围.我只需要将那些unix时间分组.
解决方法:
请试一试:
SELECT
t.id_user,
COUNT(*) totalVisits,
MAX(t.max_cons) maxCons
FROM
(SELECT
id_user,
@lastUnixTime AS lastUnixTimeOfuser,
IF(@uid <> id_user, @currentMax := 1 , @currentMax),
IF(@uid <> id_user, @lastUnixTime := 0, @lastUnixTime := @lastUnixTimeOfLastRecord),
IF(@uid = id_user,
IF((@lastUnixTime + 86400) >= utime, @currentMax := @currentMax + 1, @currentMax := 1), @lastUnixTime := 0),
IF(@currentMax > @max, @max := @currentMax, @max ),
IF(@uid <> id_user , @max := 1 ,@max),
@uid := id_user,
@lastUnixTimeOfLastRecord := utime,
@max AS max_cons
FROM
(
SELECT
id_user,
(unix_time DIV 86400) * 86400 AS utime
FROM requests
GROUP BY id_user, utime ) dayWiseRequestTable ,
(
SELECT
@uid := 0,
@currentMax := 0,
@max := 0,
@lastUnixTime := 0,
@lastUnixTimeOfLastRecord := 0
) vars
ORDER BY id_user, utime) t
GROUP BY t.id_user;
输出:
最终输出如下所示:
id_user Total_Visits Maximum_Consecutive_Visits
2353 7 2
3422 2 2
5462 3 2
7785 2 1
8007 1 1
编辑:
为了获得特定用户的输出,您需要在内部查询中添加WHERE子句.
请检查此SQL FIDDLE
内容总结
以上是互联网集市为您收集整理的mysql-如何每天对unix时间进行分组?全部内容,希望文章能够帮你解决mysql-如何每天对unix时间进行分组?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。