PDA

View Full Version : نتایج اشتباه هنگام استفاده Lead روی رکوردهای زیاد



black_wear
چهارشنبه 05 شهریور 1393, 07:11 صبح
سلام به همگی
ممنون از وقتی که بابت این سوال میذارید
وقتی از lead روی رکوردهای کمی استفاده میکنم بطور صحیح جواب میده اما وقتی رکوردها زیاد باشند نتیجه یه چیز عجیبی درمیاد!
دوستان کسی میدونه چرا؟!!!!


SELECT id
,var1
,LEAD(var1,1,null) OVER (ORDER BY var1) as nextvar
FROM T1


نتیجه درست(رکوردهای کم):
nextvar var1 id
3303 211807 222530
3304 222530 224128
3305 224128 224250
3306 224250 231244
3307 231244 NULL

نتیجه غلط (رکوردهای زیاد):(اصلا مقدارهای nextvar در دیتابیس وجود ندارند!!)
nextvar var1 id
3303 211807 215411
3304 222530 224128
3305 224128 224250
3306 224250 231244
3307 231244 NULL
3308 192834 192912
3309 192912 193017
3310 193017 203231
3311 203231 211807
3312 54238 54332
3313 54332 54518
3314 54518 54645
3315 54645 54742
3316 54742 54938
3317 54938 55032
3318 55032 55146
.................

از sql server 2012 استفاده میکنم

black_wear
پنج شنبه 06 شهریور 1393, 14:22 عصر
آیا این مشکل عادیه؟

مسئله اینجاست که روی رکوردهای کم درست جواب میده اما با رکوردهای زیاد مشکل پیدا میکنه!!

fakhravari
جمعه 07 شهریور 1393, 10:55 صبح
اگه مقدار عددی است باید اول تبدیل cast (fild as int)
کنید بعد sort انجام بدین

black_wear
شنبه 08 شهریور 1393, 13:24 عصر
سلام
ممنون از راهنمائیتون، اما مشکل با این روش حل نشد

راه حل: راه حلی که پیدا کردم این بود که نباید LAG و LEAD را رو همان ستونی اعمال کنیم که مرتب سازی روی آن انجام شده است!

کد صحیح:

SELECT id
,var1
,LEAD(var1,1,null) OVER (ORDER BY id) as nextvar
FROM T1

منبع (http://www.wiseowl.co.uk/blog/s377/lag-lead.htm)