考虑到列中的数据流,我如何总结 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.
考虑以下 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.