mysql sql查询使用添加列对数据进行分组

时间:2012-08-09 09:31:04

标签: 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列中添加第一个批量记录的日期,直到它达到下一个批量记录集。
  3. *在上面示例的DATE COLUMN中,第一个批量记录的ID为1,2,3,第二个批量记录的ID为6,7,8,反之亦然......

    我想一遍又一遍地重复步骤1和2,直到它到达表的末尾。

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

2 个答案:

答案 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列的日期。

这是SQLFiddle example

答案 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;