我有一个mysql表,有两个id列和一个date列。我正在尝试根据日期列获取连续的周数
|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|
我想要的是这样一张table
|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。提前谢谢。
2条答案
按热度按时间bvjveswy1#
不知怎的,我成功了sql。不过有点复杂。
以下是我在评论中提到的所有案例的要点:
http://sqlfiddle.com/#!9/b785df/71型
从里到外解释:
从表中选择了不同的weeknumber、id、id2值
加入了1。如果表存在,则在连续的表上再次将其自身
无论连续记录是否存在,都将连接的行转换为布尔值。
用1、2、3等索引将连续的行分组
已选择组的计数
选择具有相同id和id1的最大组数。
juud5qan2#
没有答案。评论时间太长。
考虑以下几点: