امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 2
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل با SELECT TOP هنگام بکارگیری Order By
نویسنده پیام
mojtabamalaekeh آفلاین
کاربر با تجربه
****

ارسال‌ها: 566
موضوع‌ها: 104
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 1378
( 631 تشکر در 223 ارسال )
ارسال: #1
مشکل با SELECT TOP هنگام بکارگیری Order By
سلام Rolleyes
این کوئری توی SQL Server درست کار میکنه.
توی Access هم چند ثانیه بعد از اجرا شدن این پیغام رو میده:
At most one record can be returned by this subquery
توی Fast Report هم اگه کانکشن Access باشه از همون اول این پیغام بالایی رو میده و اصلا گزارش اجرا نمیشه ولی با کانکشن SQL مشکلی نداره.

کد:
SELECT
tblDevices.ID,
tblDevices.fldRoomID,
tblDevices.fldName,
tblDevices.fldModel,
tblDevices.fldSerialNo,
tblDevices.fldAmvalNo,
tblDevices.fldDateEnter,
tblDevices.fldDateEnterSh,
tblDevices.fldDateExit,
tblDevices.fldDateExitSh,
tblDevices.fldReason,
tblDevices.fldDescription,
(SELECT TOP 1 tblPolomps.fldPolompNo FROM tblPolomps
WHERE fldDeviceID = tblDevices.ID ORDER BY fldPolompDate)AS fldPolomp  
FROM tblDevices WHERE tblDevices.fldDateExitSh = ''

جالبه که با پاک کردن Order By مشکلش توی Access و Fast Report حل میشه ولی دیگه ارزشی برای من نداره چون من جدیدترین پلمپ رو میخوام باید بر حسب تاریخ، مرتبشون کنم!

چیکار کنم؟ Sad
تقصیر مایکروسافته؟
بابا این کارمندهای تازه استخدام رو توی پروژه های مهم بکار نگیرین!


۱۷-اسفند-۱۳۹۲, ۲۲:۴۵:۱۳
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #2
RE: مشکل با SELECT TOP هنگام بکارگیری Order By
الان خروجی این دستور چیه؟!
کد php:
SELECT TOP 1 tblPolomps.fldPolompNo FROM tblPolomps
WHERE fldDeviceID 
tblDevices.ID ORDER BY fldPolompDate 
۱۸-اسفند-۱۳۹۲, ۰۱:۴۸:۲۸
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : Ambassador
mojtabamalaekeh آفلاین
کاربر با تجربه
****

ارسال‌ها: 566
موضوع‌ها: 104
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 1378
( 631 تشکر در 223 ارسال )
ارسال: #3
RE: مشکل با SELECT TOP هنگام بکارگیری Order By
(۱۸-اسفند-۱۳۹۲, ۰۱:۴۸:۲۸)babyy نوشته است: الان خروجی این دستور چیه؟!
کد php:
SELECT TOP 1 tblPolomps.fldPolompNo FROM tblPolomps
WHERE fldDeviceID 
tblDevices.ID ORDER BY fldPolompDate 

تنهایی که هیچ! ولی توی قطعه کد ارسال اول، کارش اینه که از پلمپ های موجود برای هر دستگاه
یعنی رکوردهایی که شرط tblPolomps.fldDeviceID = tblDevices.ID برقرار باشه
یه دونه رکورد رو انتخاب کنه.

اگه Order By عمل کنه که جدیدترین پلمپ انتخاب میشه اما اگه عمل نکنه اولین رکورد که همون قدیمی ترینه رو انتخاب می کنه.

توضیح اضافه اینکه هر رکورد از جدول tblDevices چندتا فرزند توی tblPolomps داره و من میخوام مشخصات هر دستگاه رو با آخرین پلمپش کوئری کنم که با JOIN نمیشه.


(آخرین ویرایش در این ارسال: ۱۸-اسفند-۱۳۹۲, ۱۱:۰۷:۵۳، توسط mojtabamalaekeh.)
۱۸-اسفند-۱۳۹۲, ۱۱:۰۵:۳۸
ارسال‌ها
پاسخ
Di Di آفلاین
مدير بخش هك و كرك
*****

ارسال‌ها: 2,358
موضوع‌ها: 116
تاریخ عضویت: اسفند ۱۳۸۵

تشکرها : 1816
( 4046 تشکر در 1321 ارسال )
ارسال: #4
RE: مشکل با SELECT TOP هنگام بکارگیری Order By
کد php:
SELECT 
tblDevices
.ID
tblDevices.fldRoomID
tblDevices.fldName
tblDevices.fldModel
tblDevices.fldSerialNo
tblDevices.fldAmvalNo
tblDevices.fldDateEnter
tblDevices.fldDateEnterSh
tblDevices.fldDateExit
tblDevices.fldDateExitSh
tblDevices.fldReason
tblDevices.fldDescription
fldPolomp2.fldPolompNo,
fldPolomp1.MDate

FROM tblDevices inner join
    
(SELECT MAX(tblPolomps.fldPolompDate) as MDatetblPolomps.fldDeviceID 
    FROM tblPolomps 
    group BY fldDeviceID
)AS fldPolomp1  on fldPolomp1.fldDeviceID tblDevices.ID 
inner join tblPolomps fldPolomp2 on fldPolomp1
.fldDeviceID=fldPolomp2.fldDeviceID 
and fldPolomp1.MDate=fldPolomp2.fldPolompDate

WHERE tblDevices
.fldDateExitSh '' 

يه چند تا مشكل تايپي تو اسم تيبل ها وجود داشت كه تصحيحشون كردم
اميدوارم كمك كنه

(آخرین ویرایش در این ارسال: ۱۸-اسفند-۱۳۹۲, ۱۴:۳۱:۵۹، توسط Di Di.)
۱۸-اسفند-۱۳۹۲, ۱۱:۲۱:۳۴
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : mojtabamalaekeh, babyy, hamed_Arfaee
mojtabamalaekeh آفلاین
کاربر با تجربه
****

ارسال‌ها: 566
موضوع‌ها: 104
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 1378
( 631 تشکر در 223 ارسال )
ارسال: #5
RE: مشکل با SELECT TOP هنگام بکارگیری Order By
خیلی ممنون آقا مهدی
اسم جدول ها رو فهمیدم منظورت چی بوده ولی برا فهمیدن تمام کد، 3 ساعت بهش ور رفتم :پی
حالا شما چند دقیقه ای کوئری رو نوشتی خدا میدونه :)

کارش درسته ولی من رکوردهایی هم دارم که فیلد تاریخشون خالیه چون دستگاه هایی هست که قبلا (زمان نامشخص) پلمپ شدن و الان فقط شماره شون ثبت میشه تا روزی که فک پلمپ بشن و ....

کلا این گزارش حذف بشه خدمت راحت تر میگذره :دی


۲۰-اسفند-۱۳۹۲, ۲۳:۳۷:۴۹
ارسال‌ها
پاسخ
Di Di آفلاین
مدير بخش هك و كرك
*****

ارسال‌ها: 2,358
موضوع‌ها: 116
تاریخ عضویت: اسفند ۱۳۸۵

تشکرها : 1816
( 4046 تشکر در 1321 ارسال )
ارسال: #6
RE: مشکل با SELECT TOP هنگام بکارگیری Order By
خواهش مي كنم مجتبي جان شما خودت استادي

براي ركوردهايي كه تاريخ ندارن بايد فرض كنيم بزرگترين شماره ركوردي كه براي اون دستگاه ثبت شده احتمالا

مربوط به آخرين تاريخ پلمپ هست و اون رو نمايش بديم.

کد php:
SELECT 
tblDevices
.ID
tblDevices.fldRoomID
tblDevices.fldName
tblDevices.fldModel
tblDevices.fldSerialNo
tblDevices.fldAmvalNo
tblDevices.fldDateEnter
tblDevices.fldDateEnterSh
tblDevices.fldDateExit
tblDevices.fldDateExitSh
tblDevices.fldReason
tblDevices.fldDescription
fldPolomp2.fldPolompNo,
fldPolomp1.MDate

FROM tblDevices inner join
    
(SELECT MAX(tblPolomps.fldPolompDate) as MDatetblPolomps.fldDeviceID 
    FROM tblPolomps where tblPolomps
.fldPolompDate is not null
    group BY fldDeviceID
)AS fldPolomp1  on fldPolomp1.fldDeviceID tblDevices.ID 
inner join tblPolomps fldPolomp2 on fldPolomp1
.fldDeviceID=fldPolomp2.fldDeviceID 
and fldPolomp1.MDate=fldPolomp2.fldPolompDate

WHERE tblDevices
.fldDateExitSh '' 
union all
SELECT 
tblDevices
.ID
tblDevices.fldRoomID
tblDevices.fldName
tblDevices.fldModel
tblDevices.fldSerialNo
tblDevices.fldAmvalNo
tblDevices.fldDateEnter
tblDevices.fldDateEnterSh
tblDevices.fldDateExit
tblDevices.fldDateExitSh
tblDevices.fldReason
tblDevices.fldDescription
fldPolomp1.MaxNO as fldPolompNo,
'UnKnown' as MDate

FROM tblDevices inner join
    
(SELECT MAX(tblPolomps.fldPolompNo) as MaxNotblPolomps.fldDeviceID 
    FROM tblPolomps where tblPolomps
.fldPolompDate is  null
    group BY fldDeviceID
)AS fldPolomp1  on fldPolomp1.fldDeviceID tblDevices.ID 

WHERE tblDevices
.fldDateExitSh '' 
در ضمن لذت حل مسئله باعث مي شه گذر زمان رو متوجه نشي و خدمت زودتر بگذره !!
اميدوارم كمك كنه

(آخرین ویرایش در این ارسال: ۲۱-اسفند-۱۳۹۲, ۰۹:۲۲:۵۴، توسط Di Di.)
۲۱-اسفند-۱۳۹۲, ۰۹:۰۶:۱۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  select های تو در تو! iranproud 1 5,970 ۰۱-تير-۱۳۸۸, ۱۰:۲۸:۱۸
آخرین ارسال: ha_60
  هنگام اجرای یه دیتابیس ... Vig 1 2,809 ۳۰-دى-۱۳۸۶, ۲۰:۲۷:۰۴
آخرین ارسال: far_222000

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS