T-SQL 표에서 두 번째 행만 선택하는 방법은 무엇입니까?
제가 자리가 있는데 두 번째 줄의 아이디를 찾아야 합니다.어떻게 그것을 달성합니까?
타고Top 2
두 개의 첫 번째 행을 선택하지만 두 번째 행만 선택하면 됩니다.
SQL Server 2012+에서는 OFFSET...을 사용할 수 있습니다.가져오기:
SELECT
<column(s)>
FROM
<table(s)>
ORDER BY
<sort column(s)>
OFFSET 1 ROWS -- Skip this number of rows
FETCH NEXT 1 ROWS ONLY; -- Return this number of rows
SQL Server 2005+를 두 번째 행만 가져오는 방법의 예로 가정합니다(질문하실 수도 있습니다). 그 이유는 다음과 같습니다.top
당신에게 안 먹힐까요?)
set statistics io on
;with cte as
(
select *
, ROW_NUMBER() over (order by number) as rn
from master.dbo.spt_values
)
select *
from cte
where rn = 2
/* Just to add in what I was running RE: Comments */
;with cte as
(
select top 2 *
, ROW_NUMBER() over (order by number) as rn
from master.dbo.spt_values
)
select *
from cte
where rn = 2
필드 ID가 고유한 경우 행 번호 함수가 필요하지 않습니다.
SELECT TOP 1 *
FROM (
SELECT TOP 2 *
FROM yourTable
ORDER BY ID
) z
ORDER BY ID DESC
사용하다ROW_NUMBER()
행에 번호를 매기려면, 그러나 사용TOP
처음 두 개만 처리할 수 있습니다.
사용해 보십시오.
DECLARE @YourTable table (YourColumn int)
INSERT @YourTable VALUES (5)
INSERT @YourTable VALUES (7)
INSERT @YourTable VALUES (9)
INSERT @YourTable VALUES (17)
INSERT @YourTable VALUES (25)
;WITH YourCTE AS
(
SELECT TOP 2
*, ROW_NUMBER() OVER(ORDER BY YourColumn) AS RowNumber
FROM @YourTable
)
SELECT *
FROM YourCTE
WHERE RowNumber=2
출력:
YourColumn RowNumber
----------- --------------------
7 2
(1 row(s) affected)
사용할 수 있습니다.OFFSET
그리고.FETCH NEXT
SELECT id
FROM tablename
ORDER BY column
OFFSET 1 ROWS
FETCH NEXT 1 ROWS ONLY;
참고:
ORDER BY 절에는 ORDER BY 절만 사용할 수 있습니다.그것은 단독으로 사용할 수 없습니다.
OFFSET 값은 0보다 크거나 같아야 합니다.음수일 수 없습니다. 그렇지 않으면 오류가 반환됩니다.
OFFSET 인수는 결과 집합에서 행을 반환하는 시작점을 식별하는 데 사용됩니다.기본적으로 첫 번째 레코드 집합은 제외됩니다.
FETCH 인수는 일련의 행 수를 반환하는 데 사용됩니다.FETCH 자체는 사용할 수 없습니다. FETCH는 OFFSET과 함께 사용됩니다.
SQL 2005 이상을 사용하고 있을 것입니다.두 번째 줄은 다음을 사용하여 상위 2개 행을 선택합니다.ORDER BY ROW_COUNT DESC
두 번째 행이 첫 번째 행으로 정렬된 다음 TOP 1을 사용하여 선택됩니다.
SELECT TOP 1 COLUMN1, COLUMN2
from (
SELECT TOP 2 COLUMN1, COLUMN2
FROM Table
) ORDER BY ROW_NUMBER DESC
with T1 as
(
select row_number() over(order by ID) rownum, T2.ID
from Table2 T2
)
select ID
from T1
where rownum=2
사용하다TOP 2
SELECT에서 원하는 수의 행을 출력합니다.그러면 데이터가 생성된 순서대로 반환됩니다.날짜 옵션이 있는 경우 날짜별로 주문할 수 있습니다.TOP n
조항
상위 2개 행을 가져오려면;
SELECT TOP 2 [Id] FROM table
특정 필드별로 상위 2개 행 순서를 지정하는 방법
SELECT TOP 2 [ID] FROM table ORDER BY <YourColumn> ASC/DESC
두 번째 행만 가져오려면;
WITH Resulttable AS
(
SELECT TOP 2
*, ROW_NUMBER() OVER(ORDER BY YourColumn) AS RowNumber
FROM @Table
)
SELECT *
FROM Resultstable
WHERE RowNumber = 2
Select top 2 [id] from table Order by [id] desc
최신 두 행을 추가해야 합니다.
하지만, 당신은 특히 주의를 기울여야 할 것입니다.order by
반환되는 첫 번째 행과 두 번째 행을 결정하는 절입니다.
쿼리를 이렇게 변경해야 하는 경우:
Select top 2 [id] from table Order by ModifiedDate desc
당신은 두 개의 다른 행을 얻을 수 있습니다.주문에 사용할 열을 명세서별로 결정해야 합니다.
저는 위의 것들보다 훨씬 쉬운 방법을 가지고 있습니다.
DECLARE @FirstId int, @SecondId int
SELECT TOP 1 @FirstId = TableId from MyDataTable ORDER BY TableId
SELECT TOP 1 @SecondId = TableId from MyDataTable WHERE TableId <> @FirstId ORDER BY TableId
SELECT @SecondId
TOP 2를 원할 경우 TOP은 분명 도움이 될 것입니다. 하지만 개별적으로 필요한 경우에는 해당 값으로 작업을 수행할 수 있도록 ROW_NUMBER를 사용하면 선택할 행을 더 잘 제어할 수 있습니다.
ps. OP가 셀렉트에서 간단한 TOP 2를 노리는 것인지 확실하지 않아서 이렇게 했습니다. (제가 틀릴 수도 있어요!)
-- Get first row, same as TOP 1
SELECT [Id] FROM
(
SELECT [Id], ROW_NUMBER() OVER (ORDER BY [Id]) AS Rownumber
FROM table
) results
WHERE results.Rownumber = 1
-- Get second row only
SELECT [Id] FROM
(
SELECT [Id], ROW_NUMBER() OVER (ORDER BY [Id]) AS Rownumber
FROM table
) results
WHERE results.Rownumber = 2
SELECT *
FROM (
SELECT top 3 *
, ROW_NUMBER() OVER (ORDER BY [newsid] desc) AS Rownumber
FROM news
where (news_type in(2,12))
) results
WHERE results.Rownumber = 1
뉴스 테이블 이름 및 newsid 열 이름
이것도 유용합니다.
SELECT t.*
FROM (
SELECT e1.*
, row_number() OVER (ORDER BY e1.Rate DESC) AS _Rank
FROM
HumanResources.EmployeePayHistory AS e1
) AS t
WHERE t._Rank = 2
SQLDiver와 Taha Ali의 의견을 바탕으로 한 비교적 간단한 솔루션이 있습니다.
함수 ORIGINAL_LOGIN()에서 검색한 'domain\username'이 포함된 문자열이 있으며 도메인 구성 요소가 필요하지 않다고 가정합니다.
제1접근법
DECLARE @Login NVARCHAR(100)
SELECT @Login = 'domain\username'
-- SELECT @Login = ORIGINAL_LOGIN()
SELECT
VALUE
FROM
STRING_SPLIT(@Login, '\')
행이 2개인 테이블을 반환합니다.첫 번째 행은 도메인을 보유하고 두 번째 행은 요청된 사용자 이름을 보유합니다.
사용.
DECLARE @Login NVARCHAR(100)
SELECT @Login = 'domain\username'
-- SELECT @Login = ORIGINAL_LOGIN()
SELECT
VALUE
FROM
STRING_SPLIT(@Login, '\')
ORDER BY
(SELECT NULL)
OFFSET 1 ROWS
FETCH NEXT 1 ROWS ONLY;
임시 테이블에서 정확히 두 번째 행을 반환합니다.
또 다른 아이디어는 다음과 같습니다.
SELECT MIN(id) FROM
(
SELECT TOP 2(TAB.[id])
FROM TAB
where TAB.field1 =3
ORDER BY TAB.[creationDate] DESC
) AS TEST
)
select *
from (
select ROW_NUMBER() OVER (ORDER BY Column_Name) as ROWNO, *
from Table_Name
) Table_Name
where ROWNO = 2
SELECT TOP 2 [Id] FROM table
언급URL : https://stackoverflow.com/questions/3617152/t-sql-how-to-select-only-second-row-from-a-table
'IT' 카테고리의 다른 글
Firebase v3.0.1+에서 로그아웃을 구현하는 가장 좋은 방법은 무엇입니까?업데이트 후 Firebase.unauth가 제거되었습니다. (0) | 2023.06.22 |
---|---|
판다는 보기와 복사본을 생성하기 위해 어떤 규칙을 사용합니까? (0) | 2023.06.22 |
Git-Merge --dry-run 옵션이 있습니까? (0) | 2023.06.22 |
특정 경로를 제공하는 http 서버를 어떻게 실행합니까? (0) | 2023.06.22 |
Google Font API 키는 어디에서 찾을 수 있습니까? (Newbie) (0) | 2023.06.22 |