[英]How do I write a query to return specified number of rows with distinct values for a particular column?
I am looking to write a query to fetch 'n' number of rows with distinct values for the column PERSON_ID?我正在寻找一个查询来获取 'n' 行具有不同值的列 PERSON_ID?
SELECT
HDR.PERSON_ID, DTL.DETAIL_ID
FROM
HEADER HDR, DETAIL DTL
WHERE
HDR.HEADER_ID = DTL.HEADER_ID
AND DTL.CODE = 'SUCCESS'
ORDER BY
HDR.PERSON_ID
If I do fetch top 5, the query will return rows 1 to 5. Instead I want to get back rows 1 to 7 - this will get me 5 person rows.如果我确实获取前 5 行,查询将返回第 1 到第 5 行。相反,我想取回第 1 到第 7 行 - 这将得到 5 个人行。
You can use DENSE_RANK()
to answer your question.您可以使用DENSE_RANK()
来回答您的问题。 More importantly, you can learn to use proper, explicit, standard JOIN
syntax.更重要的是,您可以学习使用正确、明确、标准的JOIN
语法。
SELECT pd.PERSON_ID, pd.DETAIL_ID
FROM (SELECT HDR.PERSON_ID, DTL.DETAIL_ID,
DENSE_RANK() OVER (ORDER BY HDR.PERSON_ID) as ranking
FROM HEADER HDR JOIN
DETAIL DTL
ON HDR.HEADER_ID = DTL.HEADER_ID AND DTL.CODE = 'SUCCESS'
) pd
WHERE ranking <= 5;
You could try an inner join with the distinct PERSON_ID您可以尝试使用不同的 PERSON_ID 进行内部联接
SELECT HDR.PERSON_ID, DTL.DETAIL_ID
FROM HEADER HDR
INNER JOIN DETAIL DTL ON HDR.HEADER_ID = DTL.HEADER_ID
AND DTL.CODE = 'SUCCESS'
INNER JOIN (
SELECT DISTINCT HDR.PERSON_ID
FROM HEADER HDR
INNER JOIN DETAIL DTL ON HDR.HEADER_ID = DTL.HEADER_ID
AND DTL.CODE = 'SUCCESS'
ORDER BY HDR.PERSON_ID
) T ON T.PERSON_ID = HDR.PERSON_ID
ORDER BY HDR.PERSON_ID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.