如何合并具有相同日期和参与者ID的所有行(MYSQL)

时间:2015-05-06 22:04:50

标签: mysql

所以我尝试编写一个像脚本一样简单的mysql迁移 我的目标是选择participant_id和date以及它们是否相同 - 返回计数 在这个例子中,计数将返回4.
然后我将计数并将其存储在一个变量中以放入另一个表中 基本上我将数据从4行合并为1行,在新表中将有一个计数字段。

我目前的数据。

ID   PARTICIPANT_ID  DATE  
---  --------------  ---------------------
"1"  "4"             "2015-05-06 21:35:37"
"2"  "4"             "2015-05-06 21:35:37"
"3"  "4"             "2015-05-06 21:35:37"
"4"  "4"             "2015-05-06 21:35:37"

我的目标。

ID    PARTICIPANT_ID  DATE                   COUNT  
----  --------------  ---------------------  -----
"1"   "4"             "2015-05-06 21:35:37"  "4"

我尝试过编写这样的查询:

SELECT ID, PARTICIPANT_ID, DATE FROM mytable

我需要对查询进行哪些更改才能返回指定的结果集?

4 个答案:

答案 0 :(得分:1)

这里有一个(有几个替代方案)会返回指定的结果。

SELECT MIN(t.id) AS id
     , t.participant_id
     , t.date
     , COUNT(*) AS `count`
  FROM mytable t
 GROUP BY t.participant_id, t.date

"技巧"是GROUP BY子句。那"崩溃"具有所列表达式的公共值的所有行为单行。 COUNT(*)聚合函数返回"折叠的行数"进入GROUPMIN(t.id)聚合返回组中行的id列的最低值。

答案 1 :(得分:1)

INSERT INTO TABLE2
select null, PARTICIPANT_ID, DATE, COUNT(*) from TABLE1
GROUP BY null, PARTICIPANT_ID, DATE

当TABLE2中的ID-Field为AUTOINCREMENT时,他应该将其设置为correkt。

提示:不要将列命名为“date”或“count”,因为这些名称可能是关键字,稍后您会遇到麻烦。

答案 2 :(得分:0)

问题只是第一列id,但如果需要,您可以MIN(id)MAX(id)

SELECT participant_id, `date`, CONT(*)
FROM table1
GROUP BY participant_id, `date`

答案 3 :(得分:0)

SELECT participant_id,date,count(*)
FROM yourtable
GROUP BY participant_id, date