ฉันมีตารางของผู้ใช้ที่ได้เข้าร่วม และคอลัมน์ที่ติดตามการประทับเวลาเมื่อพวกเขาเข้าร่วมคือการประทับเวลา 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