PDA

View Full Version : لیست رکوردها با توجه به تکراری نبودن یک فیلد



hr110
یک شنبه 20 فروردین 1385, 14:31 عصر
جدولی با حداقل دو فیلد به این شرح وجود دارد:
Name nvarchar(100)
RowId timestamp

حال کوئری نیاز است که :
10 رکوردی که در آخرین بار درج شده(با استفاده از فیلد RowId) و name آنها نیز تکراری نباشد.

ضمناً چه راهی برای ایجاد چنین ویووی وجود دارد:

create view AAAA as
SELECT top 10 *
FROM AAA
ORDER BY RowId DESC


با تشکر:خجالت:

AminSobati
یک شنبه 20 فروردین 1385, 17:07 عصر
create table T1(
Name varchar(100),
RowID TimeStamp)

insert t1(name) values (1)
insert t1(name) values (2)
insert t1(name) values (2)
insert t1(name) values (3)
insert t1(name) values (3)
insert t1(name) values (3)
insert t1(name) values (4)
insert t1(name) values (5)
insert t1(name) values (5)
insert t1(name) values (6)
insert t1(name) values (6)

-- Our query will use this index
create index ix1 on t1 (rowid desc,name)

create view test
as
select distinct top 5 name from t1 (index(ix1))
go

select * from test

hr110
دوشنبه 28 فروردین 1385, 09:07 صبح
سلام
ظاهراً در SQL 7 این دستور تعریف شده نیست !


create index ix1 on t1 (rowid desc)


معادلی برای این روش در SQL 7 میتوان نوشت؟

hr110
سه شنبه 29 فروردین 1385, 08:51 صبح
یک راه ابتکاری که ممکن است جواب بدهد:
استفاده از فیلد DateTime بجای timestamp و ذخیره (یا ویرایش) منفی مقدار getDate میباشد، به این صورت چون عدد getDate رو به افزایش است بنابراین منفی آن رو به کاهش خواهد بود و sort صعودی آن جواب ما خواهد بود ./

AminSobati
چهارشنبه 30 فروردین 1385, 06:42 صبح
ساختن ایندکس به این شکل که نباید قائدتا در SQL Server 7 مشکل داشته باشه:


create index ix1 on T1 (rowid ,name)

حالا Query رو به این شکل انجام بدین:


select distinct top 5 name from t1 with (index(ix1))
order by name desc

ممنون میشم اگر نتیجه رو اعلام کنین

hr110
چهارشنبه 30 فروردین 1385, 11:01 صبح
متاسفانه نتیجه ایی که مد نظرمان بود حاصل نشد. ولی روشی که در بالا ذکر کردم جواب داد.

-- ما قصدمان اینست که آخرین رکوردهایی که insertشده اند یا update شده اند بالاتر قرار بگیرد.

از بذل توجهات سپاسگذارم