【发布时间】:2020-04-24 11:02:18
【问题描述】:
我有一个已加入的用户表,跟踪他们加入时的时间戳的列是 UNIX 时间戳。
我想将它们按以秒为单位的一周时间分组,604800,但我遇到了障碍。其他搜索使用 MySQL 周,但这不是我所追求的,因为这些周在年底并不总是满的,并且根据开始日期而有所不同。
周分组查询:
SELECT
COUNT(member_id) as new_members,
MAX(joined) as last_joined,
MIN(joined) as first_joined,
YEAR(FROM_UNIXTIME(joined)) AS yr,
MONTH(FROM_UNIXTIME(joined)) AS mn,
WEEK(FROM_UNIXTIME(joined)) AS wk
FROM members
WHERE member_group_id NOT IN (2, 4, 7)
GROUP BY `yr`,`mn`,`wk`
ORDER BY new_members DESC
我想从下周日开始按时间戳对我的用户进行分组。所以,这将是下一个星期天,然后倒退一周,直到我的记录用完。
我尝试FLOOR( joined / 604800 ) AS weekno,但这是不准确的,因为它从最早或最新的记录开始,我需要从星期日开始一周,例如:
SELECT COUNT(member_id) as new_members,
MAX(joined) as last_joined, MIN(joined) as first_joined,
FLOOR( joined / 604800 ) AS weekno
FROM `members`
WHERE member_group_id NOT IN (2, 4, 7)
GROUP BY `weekno`
ORDER BY weekno DESC
有人有什么建议吗?
我正在寻找的样本数据
member_id | joined
1 | 1578182420
2 | 1578182430
3 | 1578182500
4 | 1578183400
5 | 1576082400
6 | 1576082410
7 | 1576082420
结果:
new_members | last_joined | first_joined | week_start
4 | 1578183400 | 1578181400 | 1578182400
3 | 1576082420 | 1576082400 | 1577577600
【问题讨论】:
-
您是否尝试过将时间戳转换为 UTC 日期,然后使用日期函数?
-
@fubar 是的,但是按周分组的日期函数往往会在年底提前结束一周,并不总是在新年伊始的周日开始。
-
请提供样本数据和预期结果,以便您得到更准确的答案。
-
@GMB 添加了我正在寻找的内容,但成员加入日期可以追溯到几年前
标签: mysql sql date datetime group-by