To Select Nth Maximum Value using TOP key word, You can try the following Stored Procedure.
CREATE PROCEDURE SP_SelectTopN
(@N INT)
/****************************************/
/* Created By : Loganathan V */
/* Created On: 21-Sep-2010, Tuesday */
/* Purpose : To Get the N th Top Value from*/
/* Recordset. */
/* How to : EXEC SP_SelectTopN */
/* : EXEC SP_SelectTopN 4 */
/****************************************/
AS
BEGIN
DECLARE @P INT
SELECT @P=@N
SELECT TOP 1 * FROM
(SELECT TOP (@P) * FROM SALARYTABLE ORDER BY SALARY DESC) AS TOPNRECORDS ORDER BY SALARY ASC
END
To Run the Stored Procedure follow this:
EXEC SP_SelectTopN 4
To Select Nth Maximum Value without the use of TOP key word, You can try the following Stored Procedure.
CREATE PROCEDURE USP_SELECT_TOP_NTH
(@N INT = NULL)
AS
/****************************************/
/* Created By : Loganathan V */
/* Created On: 21-Sep-2010, Tuesday */
/* Purpose : Find N th Maximum */
/* How to : EXEC USP_SELECT_TOP_NTH */
/* : EXEC USP_SELECT_TOP_NTH 4 */
/****************************************/
BEGIN
IF @N IS NULL
BEGIN
SELECT * FROM SALARYTABLE S1 WHERE (1-1)=
(
SELECT COUNT(DISTINCT(S2.SALARY)) FROM SALARYTABLE S2
WHERE S2.SALARY>S1.SALARY)
END
ELSE
BEGIN
SELECT * FROM SALARYTABLE S1 WHERE (@N-1)=
(
SELECT COUNT(DISTINCT(S2.SALARY)) FROM SALARYTABLE S2
WHERE S2.SALARY>S1.SALARY)
END
END
To Run the Stored Procedure follow this:
EXEC USP_SELECT_TOP_NTH 3
Sometimes we need to pull out the top most records in percentage. In that situations we can use the PERCENT key word to pull out the records.
SELECT TOP 50 PERCENT * FROM SALARYTABLE
The Percentage Value must be between 0 and 100. The number of records returned by PERCENT will be the actual number of records by percentage.
Is this helpful to you? If yes then leave a comment on this.
Happy Querying....................
Nice Post :)
ReplyDelete