با سلام
می خواستم ببینم می توانم به دو سطر مجاور در یک جدول بوسیله کد اس کیو ال دسترسی داشته باشم
در اصل می خواهم درون یک جدول سطرهایی را انتخاب کنم که مثلا فیلد تاریخشان از رکورد قبلی کمتر است.
متشکرم
با سلام
می خواستم ببینم می توانم به دو سطر مجاور در یک جدول بوسیله کد اس کیو ال دسترسی داشته باشم
در اصل می خواهم درون یک جدول سطرهایی را انتخاب کنم که مثلا فیلد تاریخشان از رکورد قبلی کمتر است.
متشکرم
خوب با select و order by می تونی قبل و بعد یک مقدار را پیدا کنی. شاید منظورت را دقیق متوجه نشدم.
order by سطرها را بر اساس فیلد (های) خاصی مرتب می کند
اما جدول من بایستی بر اساس یک فیلد دیگر به نام کد مرتب شود. سپس رکوردهایی رامی خواهم که اکنون مقدار تاریخشان نامرتب است.
سلام
دوست عزیز به قول آقای ودود یک مثال از آنچه می خواهی بگذار تا سوالت قابل درک تر باشد ولی آنچه من از سوالت متوجه شدم شما می خواهی ابتدا کلیه اطلاعاتت بر اساس فیلد کد مرتب شوند و بعد بر اساس تاریخ !!!!!! اگه درست متوجه شده باشم همان دستور order by کمکت میکنه و به این صورت که شما با استفاده از این دستور می توانی بانکت را بر اساس چند فیلد مرتب کنی بدین صورت که فیلد اصلی را در ابتدا و پارامترهای بعدی را به نسبت اولویت بعد از ان می گذاری وانها را با استفاده از کاما از هم جدا میکنی بطور مثال
"select * from tblname order by fild1,fild2,fild3"
امیدوارم درست سوالتان را متوجه شده باشم و مفید واقع شده باشم :oops: :wink:
فرض کنید در جدول اطلاعات زیر وجود دارد.
کد تاریخ
1 12/2/81
2 13/2/81
5 15/2/81
* 7 14/2/81
11 18/2/81
* 20 17/2/81
21 20/2/81
من از این جدول سطرهای با کد 7 و 20 را می خواهم چون فیلد تاریخ 7 از 5 کوچکتر است و فیلد تاریخ 20 نیز از 11 کوچکتر است
اگر از دستور SQL آقای دهقان استفاده می کردم همچنان همه جدول فوق را باز می گرداند.
در اصل من روشی را می خواهم که بتوانم سطر های جدول را با هم مقایسه کنم.
خودم دو روش زیر را امتحان کردم ولی به نتیجه نرسیدم.
1- جدول را با خودش join کردم بصورت روبرو که چون ممکن است کد ها به ترتیب وارد نشده باشند (مثلا در مثال فوق 4 و6و8و... وارد نشده اند) درست جواب نمی دهد
Select * from tblname inner join (select * from tblname where not code in (select top 1 code from tblname)) as a on a.Code=tblname.code+1
where tblname.date>a.date
2- از کرسرها نیز می خواستم استفاده کنم ولی وقتی یک رکورد را واکشی (Fetch) میکنم آن را به برنامه باز می گرداند و اصلا نمی دانم چگونه رکوردهایی که شرایط مورد نظر من را دارند به عنوان مجموعه جواب بازگردانم.
ببخشید داده ها به هم ریخته شدند نمی دانم چرا اینطوری شد.
کد تاریخ
............... 1 .......... 12/2/81
............... 2 .......... 13/2/81
............... 5 .......... 15/2/81
* ............ 7 .......... 14/2/81
.............. 11 ......... 18/2/81
* .......... 20 .......... 17/2/81
.............. 21 ......... 20/2/81
امیدوارم کارت راه بیفته. فقط کافیه به جای #t اسم Table خودت را بذاری
<p dir=ltr>
select
code,
(select top 1
t2.[date]
from
#t as t2
where
t2.code > aa.code
and
t2.[date] < aa.[date]
order by code desc
) as dd,
(select top 1
t2.[code]
from
#t as t2
where
t2.code > aa.code
and
t2.[date] < aa.[date]
order by code desc
) as dd2
from
#t as aa
group by
aa.code, aa.date
having
(select top 1
t2.[code]
from
#t as t2
where
t2.code > aa.code
and
t2.[date] < aa.[date]
order by code desc
) is not null
</p>
آقای ودود خیلی خیلی متشکرم
کد SQL شما با تغییراتی که در آن انجام دادم را راه انداخت.
امیدوارم که بتوانم لطفتان را جبران کنم
کد مورد استفاده من به این شکل بود
select code,date,
(select top 1 t2.date from TVaset as t2 where t2.code > aa.code order by code ) as dd,
(select top 1 t2.code from TVaset as t2 where t2.code > aa.code order by code ) as dc
from TVaset as aa
where (select top 1 ( t2.date < aa.date) from TVaset as t2 where t2.code > aa.code order by code )
order by code
با تشکر از همگی عزیزان