考虑到列中的数据流,我如何总结 table

How can I summarize a table considering the data flow in a column

考虑以下 table:

|id | region| name  | date       |
|1  | 10    | JHONY | 2015-08-21 |
|2  | 10    | JHONY | 2015-08-21 |
|3  | 20    | JHONY | 2015-08-21 |
|4  | 10    | JHONY | 2015-08-21 |
|5  | 10    | JHONY | 2015-08-21 |
|6  | 10    | MARY  | 2015-08-21 |
|7  | 10    | MARY  | 2015-08-21 |
|8  | 20    | MARY  | 2015-08-21 |
|9  | 10    | MARY  | 2015-08-21 |
|10 | 10    | JHONY | 2015-08-21 |
|11 | 10    | JHONY | 2015-08-22 |

我需要总结一下,忽略地区,名称和日期的重复性,但是当发生同一日期的同名地区变化时,它必须考虑一个发生。在这种情况下,结果会是:

| region| name  | date       |
| 10    | JHONY | 2015-08-21 |
| 20    | JHONY | 2015-08-21 |
| 10    | JHONY | 2015-08-21 |
| 10    | MARY  | 2015-08-21 |
| 20    | MARY  | 2015-08-21 |
| 10    | MARY  | 2015-08-21 |
| 10    | JHONY | 2015-08-22 |

我尝试使用

select distinct region, name, DATE_FORMAT(date, '%Y-%m-%d') from new_table;

可见http://sqlfiddle.com/#!2/73c1f3/2

但由于区域的变化,它隐藏了第 4 行和第 5 行(它们应该成为单行)和应该显示的第 9 行。 MySql 可以吗?

您需要获取上一个区域。我会用相关的子查询来解决这个问题:

select t.name, t.region, t.date
from (select t.*,
             (select t2.region
              from new_table t2
              where t2.name = t.name and
                    t2.date = t.date and -- not sure if this condition is really necessary
                    t2.id < t.id
              order by t2.id desc
              limit 1
             ) as prev_region
      from new_table t
     ) t
where prev_region is null or prev_region <> region;

为了性能,我建议在 new_table(name, id, region) 上建立索引。

Here 就是 SQL Fiddle.