我正面临中等simple-looking SELECT SQL查询的问题。

我的要求:对于一家特定的公司,如果有多个具有相同日期的记录,我只需要该日期的第一个记录,而不是全部从该日期开始。

给定表:

User company joining_date
Devika Google 1/3/2021
Aparna Apple 12/9/2021
Suresh Google 10/2/2022
Rajesh Apple 12/9/2021
Arun Google 10/2/2022

预期输出:

count users date company
2 Devika,Suresh 1/3/2021,10/2/2022 Google

我的输出:

count users date company
3 Devika,Suresh, Arun 1/3/2021,10/2/2022 Google

我的方法:

select 
    count(user) as count, 
    group_concat(DISTINCT user) as users, 
    group_concat(DISTINCT date) as date
    company
from employee 
GROUP by company 
having company = "Google";

根据要求,我按公司名称对记录进行了分组。我只想要Google的结果,因此我为此添加了条件。现在,如果我使用独特的关键字,我将不会获得重复的日期,但是我仍然有三项用户,而不是两个,而三个用户名而不是两个。我想从这个结果跳过"Arun"。

我该如何实现这种逻辑?

分析解答

假设您使用的是MySQL 8+,无处不在的方法是在汇总之前使用row_number生成所需的行。 Critereia的顺序确定每个分区中哪个是"first"行(在这种情况下,以相同的日期排行):

select count(user) as count, 
    group_concat(user) as users, 
    group_concat(joining_date) as date,
    company
  from (
    select *, Row_Number() over(partition by joining_date order by user desc) rn
    from t
    where company = 'Google'
)t
where rn = 1
group by company;

请参阅此示例小提琴