我有一个返回客户服务的数据集,如下表所示:
PERSON_ID SERVICE_CATEGORY SERVICE_RANK
1234 BLOW DRY 3
1234 CUT AND COLOUR 2
1234 RESTYLE 1
4321 BLOW DRY 3
4321 CUT AND COLOUR 2
4321 FRINGE TRIM 1
(不知道为什么我使用理发,它实际上是敏感的数据而我不能自己使用它)
所以我需要运行上面所有服务的报告,但我只想让它恢复最高的Service_Rank(1-10让我们说,1是最重要的)
这将带回最高者,即使那是第3级,但这将是我们最重要的课程。
在这种情况下,我希望它返回
PERSON_ID SERVICE_CATEGORY SERVICE_RANK
1234 RESTYLE 1
4321 FRINGE TRIM 1
我希望这是有道理的。目前它是一个视图,使用各种表来传递数据,理想情况下这将构成我的Select语句的一部分。
不幸的是,我只是在学习SQL,因此需要尽可能多的帮助!
提前致谢(我无法找到解决此问题的任何内容)
尼克
答案 0 :(得分:1)
;WITH CTE as
(
SELECT
PERSON_ID, SERVICE_CATEGORY, SERVICE_RANK,
row_number() over (partition by PERSON_ID order by SERVICE_RANK) rn
FROM
yourtable
)
SELECT
PERSON_ID, SERVICE_CATEGORY, SERVICE_RANK
FROM CTE
WHERE rn = 1
答案 1 :(得分:0)
一种方法是使用子查询来获得最高等级
select person_id, service_category, service_rank
from your_table
where service_rank = (select min(service_rank) from your_table)
这将返回带有SERVICE_RANK 1的两行。
另一种方法是使用窗口函数对行进行编号:
select person_id, service_category, service_rank
from (
select
person_id, service_category, service_rank,
rn = row_number() over (partition by person_id order by service_rank asc)
from your_table
) a where rn = 1
答案 2 :(得分:0)
假设您正在使用MSSQL并且只想要一行:
SELECT
TOP 1
*
FROM haircuts
ORDER BY service_rank
如果您想要所有具有最高服务等级的行,那么:
SELECT *
FROM haircuts
WHERE service_rank =
( SELECT MIN(service_rank) from haircuts);