1

我有以下数据

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 列中添加第一条批量记录的日期,直到它到达下一个批量记录集。

*在上述示例的 DATE COLUMN 中,第一批批量记录的 ID 为 1,2,3,第二组批量记录的 ID 为 6,7,8,反之亦然...

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

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

4

2 回答 2

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 列设置了相同的 DATE。

这是一个SQLFiddle 示例

于 2012-08-09T20:39:30.283 回答
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;
于 2012-08-09T09:42:48.843 回答