Mysql 获得连续一周的参赛作品
我有一个MYSQL表,有两个ID列和一个日期列。我正在尝试根据日期列获取连续的周数Mysql 获得连续一周的参赛作品,mysql,Mysql,我有一个MYSQL表,有两个ID列和一个日期列。我正在尝试根据日期列获取连续的周数 |ID|ID2|Date | |1 | 1 |2018-01-01| |1 | 1 |2018-01-08| |1 | 1 |2018-01-15| |2 | 1 |2018-01-01| |2 | 1 |2018-01-08| |2 | 2 |2018-01-01| 我想要的是这样一张桌子 |ID |ID2|Consecutive Week| |1 | 1 |3 | |
|ID|ID2|Date |
|1 | 1 |2018-01-01|
|1 | 1 |2018-01-08|
|1 | 1 |2018-01-15|
|2 | 1 |2018-01-01|
|2 | 1 |2018-01-08|
|2 | 2 |2018-01-01|
我想要的是这样一张桌子
|ID |ID2|Consecutive Week|
|1 | 1 |3 |
|2 | 1 |2 |
|2 | 2 |1 |
我被以下代码困住了:
SELECT a.ID, a.ID2 ,consec_set, COUNT(1) AS consec_count
FROM
(
SELECT IF(b.Date IS NULL, @val:=@val+1, @val) AS consec_set,a.ID2
FROM tbl a
CROSS JOIN (SELECT @val:=0) var_init
LEFT JOIN tbl b ON
a.ID = b.ID AND
a.ID2 = b.ID2 AND
YEARWEEK(a.Date ,1) = YEARWEEK(b.Date ,1) + 1
WHERE a.ID= 1
) a
GROUP BY a.consec_set;
我在这里遵循了几条指南,但它们只有连续几天和一个ID。提前谢谢。不是答案。评论太长了 考虑以下几点:
SELECT *, YEARWEEK(date,1) yw FROM my_table;
+-----+-----+------------+--------+
| ID1 | ID2 | Date | yw |
+-----+-----+------------+--------+
| 1 | 1 | 2018-01-01 | 201801 |
| 1 | 1 | 2018-01-08 | 201802 |
| 1 | 1 | 2018-01-15 | 201803 |
| 2 | 1 | 2018-01-01 | 201801 |
| 2 | 1 | 2018-01-07 | 201801 |
| 2 | 2 | 2018-01-01 | 201801 |
+-----+-----+------------+--------+
1,1 = 3 consecutive weeks
2,1 = 1 week
2,2 = 1 week
不知何故,我成功了SQL。不过有点复杂
SELECT id, id2, Max(cnt) FROM (
SELECT id, id2, Count(id) AS CNT FROM (
SELECT *, (
SELECT @num:=Ifnull(@num,0)) AS grouper,
@num := IF(cntn=0, @num+1, @num) AS row_number
FROM (
SELECT a.id, a.id2, a.wno, b.id IS NOT NULL AS CNTN
FROM (
SELECT DISTINCT id, id2, Week(pdate) AS WNO FROM listing) a
LEFT JOIN
(SELECT DISTINCT id, id2, Week(pdate) AS WNO FROM listing) b
ON a.wno = b.wno - 1 AND a.id = b.id AND a.id2 = b.id2
ORDER BY a.id, a.id2, a.wno
) d
) e GROUP BY e.id, e.id2, e.grouper
) f GROUP BY f.id, f.id2
下面是我在评论中提到的所有案例的重点,包括:
由内而外解释:
你能定义“周”吗?@草莓的“周”是指一年中的一周,或者是指一年中的一周(日期,1)的结果。连续周是(例如)一个ID,在一年中的第1周和第2周至少有一个条目。我不清楚如果1,1也有日期2018-02-10(例如),您的输出会是什么样子,即如果有多个离散的连续年周,该怎么办。对于ID=2和ID2=1,该周不是连续的。两个日期在同一周。应该是1吗?如果表上有这一行,
|1 | 1 | 2018-02-15 |
,输出应该是什么?想法不错,但我认为这种方法会减慢执行时间,因为我需要对一个包含30多万条目的表进行额外选择。谢谢你的提示。这里没有“思考”的事情。我只是在证明,有3个连续的星期,1个连续的星期,还有1个连续的星期。该死的传奇人物!6个小时的挣扎。你是救世主!谢谢,我喜欢有挑战性的:)每30万台0.0220秒不错:)我没想到会有这么快。