GROUP CONCAT 一些不同的一些不是
GROUP CONCAT some distinct some not
我有一个table
company invest_type date round
----------------------------------
A regular 2011
A regular 2011
A regular 2012
A special 2010 abcd
A special 2010 abcd
B regular 2011
B regular 2011
B regular 2012
B special 2010 cdcd
B special 2010 zzzz
C regular 2012
C regular 2012
C special 2010
C special 2010
我想这样显示
company dates
A 2010,2011,2011,2012
B 2010,2010,2011,2011,2012
C 2010,2012,2012
也就是说,对特殊投资日期进行了重复数据删除(通常是指定的轮次),但常规投资则没有。
我已经尝试过 `GROUP_CONCAT(DISTINCT date,invest_type) 但它并没有接近。
基本上我想从 'date' 中获取不同的日期值,只要回合不是 'null' 在这种情况下我想要重复的值。如果存在轮次,则基于轮次进行重复数据删除,如果不存在,则假设所有特殊投资都是同一轮次并进行重复数据删除。
使用子查询将常规投资中的空轮替换为计数器,以便行将是唯一的,然后使用 SELECT DISTINCT
删除其他所有内容。然后在这上面使用GROUP_CONCAT
。
SELECT company, GROUP_CONCAT(date ORDER BY date) AS dates
FROM (
SELECT DISTINCT
company, date,
CASE WHEN round IS NOT NULL THEN round
WHEN invest_type = 'regular' THEN @counter := @counter + 1
ELSE null
END AS round
FROM investments
CROSS JOIN (SELECT @counter := 0) AS var) AS x
GROUP BY company
您可以在内联视图中执行重复数据删除,并在外部查询中执行 group_concat()
,如下所示:
select
company,
group_concat(`date` order by `date` ASC separator ',') as dates
from (
select distinct company, `date`
from my_table
where invest_type = 'special'
union all
select company, `date`
from my_table
where invest_type != 'special'
) dedup
group by company
我有一个table
company invest_type date round
----------------------------------
A regular 2011
A regular 2011
A regular 2012
A special 2010 abcd
A special 2010 abcd
B regular 2011
B regular 2011
B regular 2012
B special 2010 cdcd
B special 2010 zzzz
C regular 2012
C regular 2012
C special 2010
C special 2010
我想这样显示
company dates
A 2010,2011,2011,2012
B 2010,2010,2011,2011,2012
C 2010,2012,2012
也就是说,对特殊投资日期进行了重复数据删除(通常是指定的轮次),但常规投资则没有。
我已经尝试过 `GROUP_CONCAT(DISTINCT date,invest_type) 但它并没有接近。 基本上我想从 'date' 中获取不同的日期值,只要回合不是 'null' 在这种情况下我想要重复的值。如果存在轮次,则基于轮次进行重复数据删除,如果不存在,则假设所有特殊投资都是同一轮次并进行重复数据删除。
使用子查询将常规投资中的空轮替换为计数器,以便行将是唯一的,然后使用 SELECT DISTINCT
删除其他所有内容。然后在这上面使用GROUP_CONCAT
。
SELECT company, GROUP_CONCAT(date ORDER BY date) AS dates
FROM (
SELECT DISTINCT
company, date,
CASE WHEN round IS NOT NULL THEN round
WHEN invest_type = 'regular' THEN @counter := @counter + 1
ELSE null
END AS round
FROM investments
CROSS JOIN (SELECT @counter := 0) AS var) AS x
GROUP BY company
您可以在内联视图中执行重复数据删除,并在外部查询中执行 group_concat()
,如下所示:
select
company,
group_concat(`date` order by `date` ASC separator ',') as dates
from (
select distinct company, `date`
from my_table
where invest_type = 'special'
union all
select company, `date`
from my_table
where invest_type != 'special'
) dedup
group by company