View Full Version : سوال: نمایش رکورد بر حسب تاریخ دیروز
amir_monster
چهارشنبه 14 اسفند 1387, 09:56 صبح
سلام
من یک sp برای نمایش تعداد بازدید کنندگان سایت نوشتم که فقط در نمایش تعداد بازدیدکنندگان دیروز مشکل دارم.
این کد sp :
ALTER PROCEDURE dbo.showcounter
AS
DECLARE @Now DateTime
SET @Now = GetDate()-1
Select sum(UniqueHitCount) as KoleBazdidha ,
(Select Top 1 UniqueHitCount From HitCounts Order by id Desc) as today,
(Select UniqueHitCount From HitCounts where HitDate=@now) as yesterday
From HitCounts
مشکل اینه که ( now@ ) هیچ مقداری را برای دیروز پاس نمیکنه ، از دوستان عزیز ممنون میشم راهنمایی کنید
mannai29
چهارشنبه 14 اسفند 1387, 10:14 صبح
اول اینکه متن خطاتون رو ارسال کنید . اما به احتمال زیاد مشکل از اون نیست . شما در بدنه select اصلیتون یک اشتباه دارین . به ازای دو تا فیلد اول چند تا فیلد سوم وجود داره. چون دو تا فیلد اول با یک دستور یا تابعی یونیک شدن اما فیلد سوم در subquery چند تا مقدار بر می گردونه.
EffatBandehlou
چهارشنبه 14 اسفند 1387, 10:36 صبح
پاسخ پست قبلي كاملاً درسته به اضافه اينكه تاريخ مورد نظر رو كامل در نظر مي گيره و ديگه اينكه براي Select سوم هم به گمانم بايد يك sum بزاريد
amir_monster
چهارشنبه 14 اسفند 1387, 11:22 صبح
دوستان من می خوام ار یک فیلد که نامش
UniqueHitCount است جمع کل اعداد رکورد ها ( برای کل بازدید ها ) ، رکورد آخر ( برای بازدید امروز ) ، و یک رکورد مانده به آخرین رکورد ( برای بدست آوردن تعداد بازدیدکنندگان دیروز ) را بدست آورم
و فقط در بدست آوردن تعداد بازدید دیروز مشکل دارم
حالا اصلا نمی دونم استفاده از روش بالا در نوشتن این sp روش درستی است یا نه
من در sql مبتدی هستم
EffatBandehlou
چهارشنبه 14 اسفند 1387, 11:26 صبح
Select sum(UniqueHitCount) as KoleBazdidha ,
(Select Sum(UniqueHitCount) From HitCounts where HitDate=GetDate() as today,
(Select sum(UniqueHitCount) From HitCounts where HitDate=@now) as yesterday
From HitCounts
به نظرم درستتره
البته اگه منظورتون رو درست فهميده باشم
amir_monster
چهارشنبه 14 اسفند 1387, 11:49 صبح
بازم حل نشد و هیچ مقدار عددی در سطون yesterday نمایش داده نمیشه
و مشکل در Now@ که فکر می کنم مقداری رو پاس نمی کنه
چون وقتی where رو برمیدارم مقداری رو در سطون yesterday نمایش میده
EffatBandehlou
چهارشنبه 14 اسفند 1387, 12:41 عصر
دوست عزيز فراموش نكن كه تابع GetDate() تاريخ رو به صورت كامل (تاريخ و ساعت) نشون ميده.
چك كن شايد مقدار تاريخ در فيلدهاي شما به اين شكل كامل نباشه يا نحوه ثبتش فرق داشته باشه.
علي الخصوص كه شما از عبارت = استفاده كرديد كه در اين صورت دو تا عبارات بايد كاملاً مساوي هم باشند
amir_monster
چهارشنبه 14 اسفند 1387, 14:37 عصر
در دیتابیس هم تاریخ به صورت (تاريخ و ساعت) ذخیره شده و از نوعه datetime اما نمیدونم چرا مقداری رو برنمی گردونه
3/12/2009 10:02:09 AM
احتمال داره به خاطر این باشه که چون از = استفاده کردم با date میتونه مساوی باشه اما با time نه ؟
EffatBandehlou
چهارشنبه 14 اسفند 1387, 14:49 عصر
امكانش هست.
براي حل اين مشكل فقط بخشي از زمان رو مقايسه كن
از تابع
Substring(fieldName,Startlocation,number)
كمك بگير
amir_monster
چهارشنبه 14 اسفند 1387, 15:32 عصر
درسته مشکل اینجا بود که ()GatDate تاریخ و زمان جاری رو برمیگردونه که چون = گذاشته بودم هیچ وقت نمیتونست مشابه مقدار خودشو در دیتابیس پیدا کنه برای همین هیچ مقداری رو نمایش نمی داد ، البته تاریخ مشابه وجود داشت اما زمان نه
خیلی از دست عزیز EffatBandehlou (http://barnamenevis.org/forum/member.php?u=17222) ممنون هستم که با راهنمایشون متوجه شدم اشکال از کجاست
حالا فقط مشکل اینجاست با چه تابعی میشه فقط تاریخ رو گرفت یا میشه GetDate رو جوری تعریف کرد که فقط تاریخ را بگیره ؟؟
EffatBandehlou
چهارشنبه 14 اسفند 1387, 15:37 عصر
از همون substring كه گفتم استفاده كن.
Substring(getdate(),1,10)
amir_monster
چهارشنبه 14 اسفند 1387, 15:46 عصر
در کجا باید این تابع را قرار بدم ؟ من هر کجا قرار میدم برنامه ایراد میگیره
ALTER PROCEDURE dbo.showcounter
AS
DECLARE @Now DateTime
SET @Now = getdate()
Select sum(UniqueHitCount) as KoleBazdidha ,
(Select Top 1 UniqueHitCount From HitCounts Order by id Desc) as today,
(Select UniqueHitCount From HitCounts where HitDate=@now) as today
From HitCounts
EffatBandehlou
چهارشنبه 14 اسفند 1387, 15:51 عصر
substring @Now,1,10 رو در @Now بريز.
تو شرطهات هم همينطور
substring HitDate,1,10
رو در @Now با اون مقايسه كن.
amir_monster
چهارشنبه 14 اسفند 1387, 21:44 عصر
بلاخره پس از کلی فکر کردن مشکل حل شد : :لبخندساده:
ALTER PROCEDURE dbo.showcounter
AS
Select sum(UniqueHitCount) as مجموع ,
(Select Top 1 UniqueHitCount From HitCounts Order by id Desc) as امروز,
(Select top 1 UniqueHitCount From HitCounts where HitDate < getdate() order by id desc) as دیروز
From HitCounts
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.