Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 群海螺有些明显有些不明显_Mysql_Sql_Duplicates_Distinct_Group Concat - Fatal编程技术网

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
添加到内联视图的两个组件查询的选择列表中来解决此问题。