PDA

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



Sadegh_S
سه شنبه 10 تیر 1382, 12:10 عصر
با سلام

می خواستم ببینم می توانم به دو سطر مجاور در یک جدول بوسیله کد اس کیو ال دسترسی داشته باشم
در اصل می خواهم درون یک جدول سطرهایی را انتخاب کنم که مثلا فیلد تاریخشان از رکورد قبلی کمتر است.

متشکرم

vadood
سه شنبه 10 تیر 1382, 19:37 عصر
خوب با select و order by می تونی قبل و بعد یک مقدار را پیدا کنی. شاید منظورت را دقیق متوجه نشدم.

Sadegh_S
چهارشنبه 11 تیر 1382, 11:18 صبح
order by سطرها را بر اساس فیلد (های) خاصی مرتب می کند
اما جدول من بایستی بر اساس یک فیلد دیگر به نام کد مرتب شود. سپس رکوردهایی رامی خواهم که اکنون مقدار تاریخشان نامرتب است.

morteza_dehghan
پنج شنبه 12 تیر 1382, 01:56 صبح
سلام
دوست عزیز به قول آقای ودود یک مثال از آنچه می خواهی بگذار تا سوالت قابل درک تر باشد ولی آنچه من از سوالت متوجه شدم شما می خواهی ابتدا کلیه اطلاعاتت بر اساس فیلد کد مرتب شوند و بعد بر اساس تاریخ !!!!!! اگه درست متوجه شده باشم همان دستور order by کمکت میکنه و به این صورت که شما با استفاده از این دستور می توانی بانکت را بر اساس چند فیلد مرتب کنی بدین صورت که فیلد اصلی را در ابتدا و پارامترهای بعدی را به نسبت اولویت بعد از ان می گذاری وانها را با استفاده از کاما از هم جدا میکنی بطور مثال

"select * from tblname order by fild1,fild2,fild3"

امیدوارم درست سوالتان را متوجه شده باشم و مفید واقع شده باشم :oops: :wink:

Sadegh_S
شنبه 14 تیر 1382, 09:49 صبح
فرض کنید در جدول اطلاعات زیر وجود دارد.
کد تاریخ
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) میکنم آن را به برنامه باز می گرداند و اصلا نمی دانم چگونه رکوردهایی که شرایط مورد نظر من را دارند به عنوان مجموعه جواب بازگردانم.

Sadegh_S
شنبه 14 تیر 1382, 09:56 صبح
ببخشید داده ها به هم ریخته شدند نمی دانم چرا اینطوری شد.
کد تاریخ
............... 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

vadood
شنبه 14 تیر 1382, 14:45 عصر
امیدوارم کارت راه بیفته. فقط کافیه به جای #t اسم Table خودت را بذاری

vadood
شنبه 14 تیر 1382, 14:51 عصر
<p dir=ltr>
select
code,
(select top 1
t2.[date]
from
#t as t2
where
t2.code > aa.code
and
t2.[date] &lt; 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] &lt; 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] &lt; aa.[date]
order by code desc
) is not null

</p>

Sadegh_S
دوشنبه 16 تیر 1382, 13:33 عصر
آقای ودود خیلی خیلی متشکرم
کد SQL شما با تغییراتی که در آن انجام دادم را راه انداخت.
امیدوارم که بتوانم لطفتان را جبران کنم
کد مورد استفاده من به این شکل بود



select code,date,
&#40;select top 1 t2.date from TVaset as t2 where t2.code > aa.code order by code &#41; as dd,
&#40;select top 1 t2.code from TVaset as t2 where t2.code > aa.code order by code &#41; as dc
from TVaset as aa
where &#40;select top 1 &#40; t2.date &lt; aa.date&#41; from TVaset as t2 where t2.code > aa.code order by code &#41;
order by code




با تشکر از همگی عزیزان