Mysql 群海螺有些明显有些不明显
我有一张桌子Mysql 群海螺有些明显有些不明显,mysql,sql,duplicates,distinct,group-concat,Mysql,Sql,Duplicates,Distinct,Group Concat,我有一张桌子 company invest_type date round ---------------------------------- A regular 2011 A regular 2011 A regular 2012 A special 2010 abcd A special 2010 abcd B regu
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
也就是说,特殊投资日期是重复的(通常是分配的轮数),而常规投资则不是
我试过“组”CONCAT(不同日期,投资类型),但没有成功。
基本上,我想从'date'中获取不同的日期值,只要round不是'null',在这种情况下,我想要重复的值。如果存在舍入,则根据舍入进行重复数据消除,如果不存在舍入,则假定所有特殊投资都是同一舍入并重复数据消除。使用子查询将常规投资中的空舍入替换为计数器,以便行将按唯一性进行重复,然后使用
选择DISTINCT
消除所有其他重复数据。然后在此基础上使用GROUP\u 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
您可以在内联视图中执行重复数据消除,在外部查询中执行组_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
这将把
cdcd
和zzzz
行合并到一个条目中。@Barmar,是的,会的。这是有意的,但当我回顾这个问题时,似乎并不是OP想要的。可以通过将round
添加到内联视图的两个组件查询的选择列表中来解决此问题。