SQL - Select 行,每个非唯一 ID 具有不同的一列
SQL - Select rows with distinct one column for each non-unique ID
我以前在这里看到过类似的问题,但我的问题的转折点是我无法通过唯一 ID 进行分区。
这是我的 table Request_Data 的样子:
ID Request_ID Location Order_Code Review_Status
=================================================
1 1 HQ SXXXXF Not Reviewed
2 1 Scranton ASDFGH Reviewed
3 1 Scranton ABCDEF Reviewed
4 1 Binghamton PSDFJG Not Reviewed
5 2 Scranton GGGGGG Reviewed
6 2 Stamford PRWERE Not Reviewed
7 2 Scranton UYUIFG Reviewed
我想查询 return:
Request_ID Location Review_Status
==================================================
1 HQ Not Reviewed
1 Scranton Reviewed
1 Binghamton Not Reviewed
2 Scranton Reviewed
2 Stamford Not Reviewed
说一下,我的table引用了一个外键request id,里面有多个需要审核的order code,每个order code都有一个area。一个区域的订单代码一次全部审核,所以我只需要为每个区域的每个请求 id 记录 returned 来获取该区域的审核状态。
我知道这是一个奇怪的设计;我没有设置它,但我必须使用它。谢谢
我想你只是想要 row_number()
:
select t.*
from (select t.*,
row_number() over (partition by request_id, location order by id) as seqnum
from t
) t
where seqnum = 1;
这 returns 每个 request_id
/location
对的第一条记录。
你需要使用 rownumber()
例如:
SELECT
NEW_TBL.*
FROM
(SELECT
ROW_NUMBER() OVER(PARTITION BY Location ORDER BY ID) AS ROWNUM
,TBL.*
FROM Request_Data TBL
) NEW_TBL
WHERE
NEW_TBL.ROWNUM = 1
我以前在这里看到过类似的问题,但我的问题的转折点是我无法通过唯一 ID 进行分区。
这是我的 table Request_Data 的样子:
ID Request_ID Location Order_Code Review_Status
=================================================
1 1 HQ SXXXXF Not Reviewed
2 1 Scranton ASDFGH Reviewed
3 1 Scranton ABCDEF Reviewed
4 1 Binghamton PSDFJG Not Reviewed
5 2 Scranton GGGGGG Reviewed
6 2 Stamford PRWERE Not Reviewed
7 2 Scranton UYUIFG Reviewed
我想查询 return:
Request_ID Location Review_Status
==================================================
1 HQ Not Reviewed
1 Scranton Reviewed
1 Binghamton Not Reviewed
2 Scranton Reviewed
2 Stamford Not Reviewed
说一下,我的table引用了一个外键request id,里面有多个需要审核的order code,每个order code都有一个area。一个区域的订单代码一次全部审核,所以我只需要为每个区域的每个请求 id 记录 returned 来获取该区域的审核状态。
我知道这是一个奇怪的设计;我没有设置它,但我必须使用它。谢谢
我想你只是想要 row_number()
:
select t.*
from (select t.*,
row_number() over (partition by request_id, location order by id) as seqnum
from t
) t
where seqnum = 1;
这 returns 每个 request_id
/location
对的第一条记录。
你需要使用 rownumber()
例如:
SELECT
NEW_TBL.*
FROM
(SELECT
ROW_NUMBER() OVER(PARTITION BY Location ORDER BY ID) AS ROWNUM
,TBL.*
FROM Request_Data TBL
) NEW_TBL
WHERE
NEW_TBL.ROWNUM = 1