PDA

View Full Version : راهنمایی درباره نوشتن یک کوئری



s-soleimani
پنج شنبه 03 مهر 1393, 11:47 صبح
سلام وقت بخير

من يک کوئري زیر رو نوشتم از جوین دو تا تیبل
select re.rid,re.Datepaziresh, ra.Date
FROM report as re inner join ravanshenasi as ra
on re.RID=ra.rid where re.Datepaziresh='1392/02/13' and ra.Date>='1392/02/13' order by rid,date DESC
حاصل کوئري فوق عکس زير هستش

123881

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

123882

ممنون میشم راهنمایی بفرمایید

asemoon barooni
پنج شنبه 03 مهر 1393, 14:04 عصر
با سلام

با توجه به چیزی که من متوجه شدم گویا شما همیشه رکورد کوچکترین تاریخ رو میخواید و بقیه رکوردها لازیم نیست برای همین من کد زیر رو نوشتم:

SELECT rid,Datepaziresh,Date
FROM(

select ROW_NUMBER()OVER(PARTITION BY re.rid ORDER BY ra.Date) AS RowSelect,re.rid,re.Datepaziresh, ra.Date
FROM report as re inner join ravanshenasi as ra
on re.RID=ra.rid where re.Datepaziresh='1392/02/13' and ra.Date>='1392/02/13' order by rid,date DESC)DR

WHERE RowSelect=1

salmanbnd
جمعه 04 مهر 1393, 01:45 صبح
سلام وقت بخير

من يک کوئري زیر رو نوشتم از جوین دو تا تیبل
select re.rid,re.Datepaziresh, ra.Date
FROM report as re inner join ravanshenasi as ra
on re.RID=ra.rid where re.Datepaziresh='1392/02/13' and ra.Date>='1392/02/13' order by rid,date DESC
حاصل کوئري فوق عکس زير هستش

123881

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

123882

ممنون میشم راهنمایی بفرمایید

سلام
سوالتونو خیلی شبیه به معما مطرح کردید!
در مورد چیزی که میخواین بیشتر توضیح بدین، چرا ردیفهای 2 و 3 در نتیجه نباید نشون داده بشن؟
شما میخواید همونطور که asemoon barooni (http://barnamenevis.org/member.php?132255-asemoon-barooni) گفتند "رکورد کوچکترین تاریخ رو میخواید و بقیه رکوردها لازیم نیست"؟ که جوابو ایشون زحمت کشیدند دادند. منم از طرف شما ازشون تشکر میکنم!

s-soleimani
شنبه 05 مهر 1393, 08:10 صبح
سلام
من هم از ایشون تشکر میکنم .
نمی خوام ردیف 2 و 3 بیاد به این دلیل که اگر به آی دی ها دقت کنید شماره یک و دو و سه دارای یک آِی دی هستند و من از هر آی دی یک رکورد میخوام رکوردی که تاریخش به تاریخ کوئری نزدیکتر باشه

s-soleimani
شنبه 05 مهر 1393, 08:46 صبح
با سلام

با توجه به چیزی که من متوجه شدم گویا شما همیشه رکورد کوچکترین تاریخ رو میخواید و بقیه رکوردها لازیم نیست برای همین من کد زیر رو نوشتم:

SELECT rid,Datepaziresh,Date
FROM(

select ROW_NUMBER()OVER(PARTITION BY re.rid ORDER BY ra.Date) AS RowSelect,re.rid,re.Datepaziresh, ra.Date
FROM report as re inner join ravanshenasi as ra
on re.RID=ra.rid where re.Datepaziresh='1392/02/13' and ra.Date>='1392/02/13' order by rid,date DESC)DR

WHERE RowSelect=1
--------------------------
سلام ضمن تشکر از شما من کوئری شما رو در sql 2012 اجرا کردم خطای زیر رو داره

Msg 1033, Level 15, State 1, Line 6
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.

asemoon barooni
یک شنبه 06 مهر 1393, 21:29 عصر
سلام ببخشید بابت تاخیر در جواب
SELECT rid,Datepaziresh,Date
FROM(

select ROW_NUMBER()OVER(PARTITION BY re.rid ORDER BY ra.Date DESC) AS RowSelect,re.rid,re.Datepaziresh, ra.Date

FROM report as re inner join ravanshenasi as ra
on re.RID=ra.rid where re.Datepaziresh='1392/02/13' and ra.Date>='1392/02/13' )DR


WHERE RowSelect=1





ببخشید من به سورت کد شما توجه نکرده بودم اون قسمت دیگه اضافی بود .