درخواست های ارتباط
جستجو
    لیست دوستان من
    صندوق پیام
    همه را دیدم
    • در حال دریافت لیست پیام ها
    صندوق پیام
    رویدادها
    همه را دیدم
    • در حال دریافت لیست رویدادها
    همه رویدادهای من
    اطلاعات مطلب
      مدرس/نویسنده
      حسین احمدی
      امتیاز: 464787
      رتبه:3
      340
      253
      402
      2671
      حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ... پروفایل کاربر

      ویدیوهای پیشنهادی

      بدست آوردن مقادیر یک ستون از رکورد قبلی یا بعدی بوسیله توابع LAG و LEAD در SQL Server

      تاریخ 16 ماه قبل
      نظرات 1
      بازدیدها 436
      یکی از مشکلاتی که اکثر دوستان در زمان نوشتن کوئری ها با آن برخورد می کنند استفاده از مقادیر یک ستون در سطر قبلی یا سطر بعدی رکورد جاری است. یکی از روش های حل این مشکل استفاده از Cursor ها است. از نسخه 2012 در SQL Server توابعی اضافه شدند به نام های LAG و LEAD که جزو توابع Analytical محسوب می شوند. بوسیله این توابع می توان مقادیر یک ستون از سطر قبلی یا بعدی رکورد جاری را بدست آورد. برای آشنایی بیشتر با این توابع جدول زیر را به عنوان جدول نمونه ایجاد می کنیم:

      create table #Sales
      (
      	[Id] int identity not null primary key,
      	[Date] datetime not null,
      	[TotalSale] int not null
      );
      go
      
      insert into #Sales ([Date],[TotalSale])
      values
      ('2014-12-20',20),
      ('2014-11-05',5),
      ('2015-04-18',21),
      ('2015-04-20',15),
      ('2015-04-15',8),
      ('2015-05-04',12)
      

      در قدم بعدی خروجی کوئری زیر را برای گرفتن خروجی به صورت مرتب شده بر اساس تاریخ می نویسیم:

      select * from #Sales order by [Date]
      

      فرض کنید قصد داریم در کنار ستون TotalSale ستونی اضافه کنیم که مقدار فروش روز قبل را نیز نمایش دهد، برای اینکار کوئری بالا را به صورت زیر تغییر می دهیم:

      select 
      	[Id],
      	[Date],
      	[TotalSale],
      	LAG(TotalSale) over (order by [Date]) LastDaySale
      from #Sales 
      order by [Date]
      

      همانطور که مشاهده می کنید برای بدست آوردن مقدار ستون قبلی از تابع LAG استفاده شده است، دقت کنید که برای استفاده از این تابع باید از ترکیب آن با OVER استفاده کرد، زیر گرفتن مقدار بر اساس مرتب سازی ای که در بخش OVER مشخص شده استخراج می شود. در قدم بعدی ستونی برای مقدار روز بعد اضافه می کنیم:

      select 
      	[Id],
      	[Date],
      	[TotalSale],
      	LAG(TotalSale) over (order by [Date]) LastDaySale,
      	LEAD(TotalSale) over (order by [Date]) NextDaySale
      from #Sales 
      order by [Date]
      

      خروجی کوئری بالا به صورت زیر خواهد بود:

      آموزش SQL Server


      از ترکیب این دو تابع می توان کوئری های پیچیده ای که نیاز به Cursor دارند را به کوئری های خیلی ساده تری تبدیل کرد. ITPRO باشید

      نویسنده: حسین احمدی
      منبع: ITpro
      برچسب ها
      مطالب مرتبط

      در حال دریافت اطلاعات

      نظرات
      • با سلام و خسته نباشید خدمت استاد عزیزم جناب آقای مهندس حسین احمدی
        از بابت این مقاله بسیار سودمند خیلی ممنونم واقعا عالی بود دست شما درد نکنه خیلی استفاده کردم
        واقعا tosinso.com سایت عالی هست چون من بیشترین سئوالاتی که می کنم و بیشترین مقالاتی که ملاحظه می کنم در سایت tosinso.com هست واقعا بهتون خسته نباشید می گویم بابت این زحماتی که می کشید چون tosinso.com تنها سایتی هست که کاربران با خیال راحت و بدون دردسر سئوالات خودشونو مطرح می کنن و متخصصین عالی که در سایت tosinso.com هستند جواب سئوالات را می دهند
        با تشکر از شما

      برای ارسال نظر ابتدا به سایت وارد شوید

      arrow