2012-08-09 25 views
1

我有以下数据MySQL的SQL查询组数据与另外列

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 
  1. 我想读DATE列找到散装*组记录(即超过3条记录与同一日期)我的意思是在同一天
  2. 记录一次,我发现大部分*记录集我想继续在ISSUE列中添加第一个批量记录的日期,直到它遇到下一个批量记录集。

*在上面的例子中的日期栏,第一体记录与ID 1,2,3和第二组散装记录id为6,7,8,反之亦然...

我要重复第1步和第2步,直到它到达表的末尾。

有没有办法做这个mysql sql查询?

+0

尝试更新的查询。它应该工作。 – Omesh 2012-08-16 06:05:18

回答

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; 
+0

对不起,它没有工作。 – Developer 2012-08-09 10:52:17

+0

尝试更新查询。它应该工作。 – Omesh 2012-08-09 13:21:17

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),因为你需要设置的3条记录,如果你只需要2条记录在同一日期开始批量设置只留下第一个。

对于第一个批量集合开始前的第一个记录,我为ISSUE列设置了相同的 DATE。

这里是一个SQLFiddle example

+0

@Developer:如果这个答案适合你,请[标记为已接受](http://stackoverflow.com/faq#howtoask) – valex 2012-08-17 11:26:54