我有以下数据
id Date
-----------------
1 1/1/2009
2 1/1/2009
3 1/1/2009
4 20/1/2009
5 24/1/2009
6 29/1/2009
7 29/1/2009
8 29/1/2009
9 10/2/2009
10 11/2/2009
11 21/2/2009
12 21/2/2009
13 21/2/2009
我想用这样的结果返回结果。
id date issue (this column is not in db, addition of column in query using logic)
----------------------------------
1 1/1/2009 1/1/2009
2 1/1/2009 1/1/2009
3 1/1/2009 1/1/2009
4 20/1/2009 1/1/2009
5 24/1/2009 1/1/2009
6 29/1/2009 29/1/2009
7 29/1/2009 29/1/2009
8 29/1/2009 29/1/2009
9 10/2/2009 29/1/2009
10 11/2/2009 29/1/2009
11 21/2/2009 21/2/2009
12 21/2/2009 21/2/2009
13 21/2/2009 21/2/2009
*在上面示例的DATE COLUMN中,第一个批量记录的ID为1,2,3,第二个批量记录的ID为6,7,8,反之亦然......
我想一遍又一遍地重复步骤1和2,直到它到达表的末尾。
有没有办法做这个mysql sql查询?
答案 0 :(得分:1)
select id,date,
if((@s:=if(date=(select date from t t2 where t2.id>t.id order by id limit 1 offset 0)
and
date=(select date from t t2 where t2.id>t.id order by id limit 1 offset 1)
,date,@s))='',date,@s) issue
from t,(select @s:='') s
order by id
我使用了2个嵌套查询(偏移0和1),因为如果只需要2个具有相同日期的记录来启动批量设置,则需要设置3个记录,只留下第一个。
同样对于第一个批量集开始之前的第一个记录,我设置相同 ISSUE列的日期。
答案 1 :(得分:0)
尝试此查询,它已针对您的数据集进行了测试:
SELECT IF(b.cnt < 3, @d_prev, a.`date`) AS new_date,
IF(b.cnt = 3, @d_prev := a.`date`, a.`date`) AS date
FROM table_name a
INNER JOIN (SELECT `date`, COUNT(1) AS cnt
FROM table_name, (SELECT @d_prev := "0000-00-00") a
GROUP BY d
) b
ON a.`date` = b.`date`
ORDER BY a.id ASC;