我正面临中等simple-looking SELECT SQL查询的问题。
我的要求:对于一家特定的公司,如果有多个具有相同日期的记录,我只需要该日期的第一个记录,而不是全部从该日期开始。
给定表:
User | company | joining_date |
---|---|---|
Devika | 1/3/2021 | |
Aparna | Apple | 12/9/2021 |
Suresh | 10/2/2022 | |
Rajesh | Apple | 12/9/2021 |
Arun | 10/2/2022 |
预期输出:
count | users | date | company |
---|---|---|---|
2 | Devika,Suresh | 1/3/2021,10/2/2022 |
我的输出:
count | users | date | company |
---|---|---|---|
3 | Devika,Suresh, Arun | 1/3/2021,10/2/2022 |
我的方法:
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;
请参阅此示例小提琴