2016-10-08 2 views
0

나는 이것이 쉽다는 것을 확신하지만 나는 많이 봤 거든 수색했다.SQL Server의 최근 행

좋아요, 나는 100000000000000000 개의 레코드가있는 날짜가없는 테이블이 있습니다.

나는 최신 항목을보고 싶어, 즉

Select top 200 * 
from table 

는하지만 최신 항목을보고 싶어요. 테이블에 사용할 수있는 행 식별자가 있습니까?

select top 200 * 
from table 
order by rowidentifer Desc 

감사

+2

아니요 테이블에 순서가 없습니다. – dnoeth

+0

100000000000000000 개의 행이있는 테이블을 만드는 것은 거의 불가능합니다. 그렇게한다면 대화 할 수있는 DBA가 있어야합니다. –

+2

예. BS를 완료하십시오. 각 행이 14 바이트로 작아도 테이블의 저장 공간은 1400 페타 바이트가됩니다. –

답변

-1

당신이 열이 하나 (예. 정체성, 또는 SEQUENCE, 또는 유사한 무언가로 전용 한 돈`t 경우 아니, 짧은에, 아무도는 없다). 그렇게했다면 순서대로 결과를 얻을 수 있습니다.

0

는 내가 테이블에서 사용할 수있는 row.identifier 200 * 테이블 순서에서 row.identifer 제품 설명에 의해 상단이 설정하여 예되어

는 이미 주석의에 명시된 바와 같이, 이없는

. 가장 좋은 방법은 신원, 타임 스탬프 또는 다른 형식의 레코드 식별 방법입니다. 여기에 EXCEPT을 사용하여 필요한 것을 얻을 수있는 대체 방법이 있지만 실행 계획이 가장 좋지는 않습니다 ... 주위를 둘러보고 필요에 따라 변경하십시오. 다른 주에

 --testing purposes... 
DECLARE @tbl TABLE(FirstName VARCHAR(50)) 
DECLARE @count INT = 0 

WHILE (@count <= 12000) 
BEGIN 
    INSERT INTO @tbl(FirstName) 
    SELECT 
     'RuPaul ' + CAST(@count AS VARCHAR(5)) 

    SET @count += 1 

END 

--adjust how many records you would like, example is 200 
SELECT * 
FROM @tbl 
EXCEPT(SELECT TOP (SELECT COUNT(*) - 200 FROM @tbl) * FROM @tbl) 

--faster than above 
DECLARE @tblCount AS INT = (SELECT COUNT(*) FROM @tbl) - 200 
SELECT * 
FROM @tbl 
EXCEPT(SELECT TOP (@tblCount) * FROM @tbl) 

, 당신은 ID 및 기타 열이 다른 Table Variable를 만들 수 있습니다, 당신은 당신이 필요로하는 것 레코드를 삽입 할 수있다. 그럼 당신은

당신이

ALTER TABLE TABLENAME 
ADD ID INT IDENTITY 

이 테이블 "ID"에 다른 열을 추가합니다을 자동으로 줄 수있는 무엇 ... 예를 OrderBy 등을 들어, 테이블에 대해 다른 작업을 수행 할 수 있습니다 그것은 ID입니다. 그럼 당신은 당신이 사용할 수있는 식별자를 가지고 ...

0

이것은 정말 질문에 대한 답변이 아닙니다. %%physloc%%을 사용할 수 있는지 궁금합니다.

아니요.
생성 날짜/시간 필드 또는 순차 필드가 필요합니다. 그래서 %%physloc%%는 그것을 사용할 수없고, 2 개 개의 선택은 다른 레코드를 반환

create table Test (id int identity(1,1) primary key, var1 varchar(20), creation_date datetime default SYSDATETIME()); 

declare @T table (c char(1)); 

insert into @T (c) values 
('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z'); 

insert into Test (var1) select concat(t1.c,t2.c,t3.c) as text from @T t1, @T t2, @T t3 order by 1; 

select top 10 *, %%physloc%% as physloc from Test order by %%physloc%% desc; 

select top 10 * from Test order by id desc; 

:

이 테스트된다.