نمایش نتایج 1 تا 16 از 16

نام تاپیک: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

  1. #1
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350

    دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    سلام
    بانک من SQL SERVER 2008 R2 است و فیلد sicard من Identify می باشد
    من دستور زیر را نوشتم و رکوردهای تکراری را به خوبی پاک می کند.

    delete CardTable Where sicard Not in ( Select Min ( sicard ) From CardTable Group by employee_number )

    حال می خواهم با کمک دستور بالا رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

  2. #2

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    دوست گرامی،
    می تونی یک نمونه از داده های جدولت رو پست کنی و بگی دقیقا چه سطرهایی و بر چه اساسی حذف شوند؟
    الان last_modified که اشاره شد، کوچکتر از چه مقداری باشد تا حذف شود؟ لازم دقیق تر و شفاف تر توضیح بدین.

  3. #3
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    سلام وتشکر
    رکورد اول داریم نام:علی نام خانوادگی :حسینی و کدپرسنلی 100و last_modified آن 5/6/2012 (تاریخ تغییر ازجنس datetime)
    رکورد دوم داریم نام:علی نام خانوادگی :حسینی و کدپرسنلی 100و last_modified آن 1/1/2005 (تاریخ تغییر ازجنس datetime)

    رکورد دوم که تاریخ تغییر آن 1/1/2005 قدیمی تر (کوچکتر) حذف شود

  4. #4
    کاربر دائمی آواتار mohsen24000
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    شهر مقدس قم
    پست
    583

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    شرح کوئری:
    ردیف هایی که last_modified اونها از ماکزیموم last_modified که کد پرسنلی برابری دارند، کوچکتر هستند رو حذف کن.

  5. #5
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    سلام
    راه حل:
    delete CardTable Where last_modified Not in ( Select max ( last_modified ) From CardTable Group by employee_number )

  6. #6

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    جناب علی عباسی،
    مراقب باشین، کدتون خیلی خطرناکه، اگه منظورتون اینه که به ازای هر پرسنلی تمام سطرهاش به غیر از اونی که دارای بزرگترین مقدار در ستون last_modified هست حذف بشن کوئریتون کاملا اشتباست!

    به تصویر زیر توجه بفرمایید، کوئری شما با داده های مذکور چه میکنید. فقط یک سطر رو حذف میکنه!
    table.png

    اگه راه حل صحیح میخواهین گزاره حاج محسن رو تبدیل به زبان SQL کنید که یک فرم پیاده سازیش به این شکل هست:
    ;with cte as
    (select *,
    row_number()
    over(partition by employee_number
    order by last_modified desc) as rnk
    from CardTable)
    Delete cte where rnk > 1;

  7. #7
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    سلام و تشکر
    من از دلفی 7 استفاده می کنم و خیلی از دستورات را ایراد می گیرد مثل:row_number()
    و نمی توانم استفاده کنم

  8. #8
    کاربر دائمی آواتار mohsen24000
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    شهر مقدس قم
    پست
    583

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    جسارتا! دلفی 7 چه ربطی داره به Row_Number در اسکیوال سرور!!؟
    باید ببینید شما این دستورات SQL رو روی چه دیتابیس و انجینی اجرا می کنید. طبیعتا این دستورات روی مثلا AbsDbase ، SQLite و امثالهم اجرا نمیشه و بایستی رو نسخه های جدید SQL Server اجراشون کرد...

  9. #9
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    سلام
    شاید این مورد اینجا مناسب نباشد دستور من در دلفی7 کار حذف به خوبی انجام می دهد و بعد اتمام کار این خطا که نشان می دهد و چطوری از شر این خطا خلاص شوم.
    Commandtext dos not return a result set

    with ADOQuery_Delete_Condition do
    begin
    //Active := False;
    SQL.Clear;
    SQL.Add(' delete CardTable Where '+Field_name3+' Not in ( Select max ( '+ Field_name3+' ) From CardTable Group by ' +Field_name1+ ' ) ');
    ExecSQL;
    Open;
    insert;
    Cancel;
    end;

    ADOQuery_Delete_Condition.Requery();

  10. #10
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    نقل قول نوشته شده توسط mohsen24000 مشاهده تاپیک
    جسارتا! دلفی 7 چه ربطی داره به Row_Number در اسکیوال سرور!!؟
    باید ببینید شما این دستورات SQL رو روی چه دیتابیس و انجینی اجرا می کنید. طبیعتا این دستورات روی مثلا AbsDbase ، SQLite و امثالهم اجرا نمیشه و بایستی رو نسخه های جدید SQL Server اجراشون کرد...
    سلام
    درسته که در SQL Server 2008 اجرا می شه ولی من با ADO دلفی 7 به sql server 2008 وصل می شم که یکسری دستورات جدید sql server 2008 پشتیانی نمی کند.

  11. #11

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    نقل قول نوشته شده توسط ali_abbasi22145 مشاهده تاپیک
    سلام و تشکر
    من از دلفی 7 استفاده می کنم و خیلی از دستورات را ایراد می گیرد مثل:row_number()
    و نمی توانم استفاده کنم
    منظورتون اینه که چون مثلا row_number ساپورت نمیشه تو دلفی باید از کوئری اشتباهتون استفاده کنید.
    این کوئری چطور، اینم در دلفی در هنگام اجرا با مشکل مواجه میشه؟
    delete from  CardTable
    where last_modified <
    (select max(C.last_modified)
    from CardTable C
    where C.employee = CardTable.employee);

  12. #12
    کاربر دائمی آواتار mohsen24000
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    شهر مقدس قم
    پست
    583

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    ببینید! شما وقتی Insert، Update و Delete رو انجام می دید، طبیعتا RecordSet به شما بر نمی گردونه! پس باید کوئری رو Execute کنید تا خطا دریافت نکنید.
    دستور Row_Number در SQLServer 2008 اجرا میشه و مشکلی نداره!!
    بنده خودم الان دارم با ADO و SQLServer2008 از همین دستور استفاده می کنم.
    شما برای تست هم که شده یه SP بسازید و با ADO StoredProc این کار رو انجام بدید باز ببینید مشکلی دارید یا خیر!؟

  13. #13
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    نقل قول نوشته شده توسط msalim مشاهده تاپیک
    جناب علی عباسی،
    مراقب باشین، کدتون خیلی خطرناکه، اگه منظورتون اینه که به ازای هر پرسنلی تمام سطرهاش به غیر از اونی که دارای بزرگترین مقدار در ستون last_modified هست حذف بشن کوئریتون کاملا اشتباست!

    به تصویر زیر توجه بفرمایید، کوئری شما با داده های مذکور چه میکنید. فقط یک سطر رو حذف میکنه!

    table.png

    اگه راه حل صحیح میخواهین گزاره حاج محسن رو تبدیل به زبان SQL کنید که یک فرم پیاده سازیش به این شکل هست:
    ;with cte as
    (select *,
    row_number()
    over(partition by employee_number
    order by last_modified desc) as rnk
    from CardTable)
    Delete cte where rnk > 1;
    سلام
    کورئی من خیلی تست کردم و مشکلی ندیدم ، من می خواهم تمام رکوردهایی که کدپرسنلی آنها یکی است منهای رکوردی که last_modified آن جدیدتر است بماند(یعنی با یک کدپرسنلی فقط last_modified آن جدیدتر است بماند)
    منظورتان را دقیقا متوجه نشدم.

  14. #14
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    نقل قول نوشته شده توسط msalim مشاهده تاپیک
    منظورتون اینه که چون مثلا row_number ساپورت نمیشه تو دلفی باید از کوئری اشتباهتون استفاده کنید.
    این کوئری چطور، اینم در دلفی در هنگام اجرا با مشکل مواجه میشه؟
    delete from  CardTable
    where last_modified <
    (select max(C.last_modified)
    from CardTable C
    where C.employee = CardTable.employee);
    سلام
    این هم مثل کوئری من کار می کند و فرقی با کوئری من در عملکرد ندیدم!

  15. #15
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    نقل قول نوشته شده توسط mohsen24000 مشاهده تاپیک
    ببینید! شما وقتی Insert، Update و Delete رو انجام می دید، طبیعتا RecordSet به شما بر نمی گردونه! پس باید کوئری رو Execute کنید تا خطا دریافت نکنید.
    دستور Row_Number در SQLServer 2008 اجرا میشه و مشکلی نداره!!
    بنده خودم الان دارم با ADO و SQLServer2008 از همین دستور استفاده می کنم.
    شما برای تست هم که شده یه SP بسازید و با ADO StoredProc این کار رو انجام بدید باز ببینید مشکلی دارید یا خیر!؟
    سلام
    یک مثل استفاده Execute اینجا بگذارید آیا منظورتون ExecSQL است؟

    دلفی شما ورژنش بالاتر از دلفی 7 است ، ورژن دلفی شما چنده؟

  16. #16
    کاربر دائمی آواتار ali_abbasi22145
    تاریخ عضویت
    آذر 1382
    محل زندگی
    يك جايي در پايتخت
    پست
    1,350

    نقل قول: دستوری که رکوردهایی که فیلد last_modified آنها که کوچکتر است پاک شود؟

    سلام
    پیدا کردم رفع ان خطا را :
    This will re-execute the query again, expecting a result set.
    You should not set Active to True (or False again) when using with
    UPDATE (or INSERT/DElETE) commands that to not return result sets.
    ExecSQL is enough
    do not use Requery ....

تاپیک های مشابه

  1. پاسخ: 1
    آخرین پست: شنبه 27 خرداد 1391, 17:39 عصر
  2. سوال: انتخاب رکوردهایی که جمع مقادیر آنها مساوی است با
    نوشته شده توسط فؤاد در بخش SQL Server
    پاسخ: 17
    آخرین پست: دوشنبه 31 خرداد 1389, 15:59 عصر
  3. غیر فعال کردن تاپیک هایی که از موقع آخرین ارسال به آنها خیلی گذشته است!
    نوشته شده توسط sarvestan در بخش گفتگو با مسئولین سایت، درخواست و پیشنهاد
    پاسخ: 3
    آخرین پست: دوشنبه 15 آبان 1385, 14:05 عصر
  4. آیا data این فیلد من برای فیلد نوع date/time درست است?
    نوشته شده توسط ali_abbasi22145 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 5
    آخرین پست: سه شنبه 27 دی 1384, 23:34 عصر
  5. آیا دستوری برای update کردن یک cell از نوع عددی است
    نوشته شده توسط kochol در بخش SQL Server
    پاسخ: 1
    آخرین پست: چهارشنبه 02 دی 1383, 19:27 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •