PDA

View Full Version : سوال: حذف تمامی رکوردهای تکراری که فقط id و تاریخ آنها متفاوت است



دلتنگ اسمان
چهارشنبه 02 تیر 1395, 18:11 عصر
با سلام
پارسال یه برنامه نوشتم و یه جدولی(به نام :general) که طراحی کردم الان حاوی اطلاعات است. تقریبا 24000 رکورد (دیتابیس:sql server Enterprise)
الان که می خوام برنامه رو یه تغییراتی بدم می بینم که این جدول حاوی رکوردهای تکراری است و اصلان نیازی نبوده که اینطوری طراحی کنم .
این جدول حاوی id , کدملی و تاریخ مراجعه و ... می باشد. حالا میخوام برای هر کدملی فقط یه رکورد نگه دارم و بقیه موارد رو حذف کنم. (فقط idو تاریخ متفاوته).

اگه بشه اولین مراجعه رو حفظ کنم و بقیه رو حذف کنم خوبه.(هر چند فرق زیادی نمیکنه)

daffy_duck376
پنج شنبه 03 تیر 1395, 08:44 صبح
سرچ کن عزیزم
https://www.google.com/?ion=1&espv=2#q=delete%20repeated%20records%20sqlserver

mrprestige
پنج شنبه 03 تیر 1395, 09:47 صبح
با سلام
پارسال یه برنامه نوشتم و یه جدولی(به نام :general) که طراحی کردم الان حاوی اطلاعات است. تقریبا 24000 رکورد (دیتابیس:sql server Enterprise)
الان که می خوام برنامه رو یه تغییراتی بدم می بینم که این جدول حاوی رکوردهای تکراری است و اصلان نیازی نبوده که اینطوری طراحی کنم .
این جدول حاوی id , کدملی و تاریخ مراجعه و ... می باشد. حالا میخوام برای هر کدملی فقط یه رکورد نگه دارم و بقیه موارد رو حذف کنم. (فقط idو تاریخ متفاوته).

اگه بشه اولین مراجعه رو حفظ کنم و بقیه رو حذف کنم خوبه.(هر چند فرق زیادی نمیکنه)

سلام خدمت شما دوست عزیز وقتت بخیر ، با توجه به اینکه تعداد رکوردهای زیادی داری من بهت HAshTable رو پیشنهاد میکنم این متدی که برات نوشتم با استفاده از HashTable رکوردهای تکراری تون رو حذف میکنه

public DataTable hazv_Record_tekrari(DataTable DT, string colName)
{
Hashtable hashTable = new Hashtable();
ArrayList duplicateList = new ArrayList();
foreach (DataRow drow in DT.Rows)
{
if (hashTable.Contains(drow[colName]))
duplicateList.Add(drow);
else
hashTable.Add(drow[colName], string.Empty);
}
foreach (DataRow dRow in duplicateList)
DT.Rows.Remove(dRow);
return DT;
}


اگه باز درباره Hashtable ها متوجه نشدی یا کلا از این بخش برات سوالی پیش اومد بگو تا جواب بدم .
امیدوارم پیرو و مموفق باشید
از کدنویسی لذت ببرید

دلتنگ اسمان
پنج شنبه 03 تیر 1395, 10:37 صبح
سرچ کن عزیزم
https://www.google.com/?ion=1&espv=2#q=delete%20repeated%20records%20sqlserver

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

WITH cte
AS (SELECT ROW_NUMBER() OVER (PARTITION BY CodeMelli
ORDER BY ( TarikhMoraje)) RN
FROM TableName)

DELETE FROM cte
WHERE RN > 1

دلتنگ اسمان
پنج شنبه 03 تیر 1395, 10:38 صبح
سلام خدمت شما دوست عزیز وقتت بخیر ، با توجه به اینکه تعداد رکوردهای زیادی داری من بهت HAshTable رو پیشنهاد میکنم این متدی که برات نوشتم با استفاده از HashTable رکوردهای تکراری تون رو حذف میکنه

public DataTable hazv_Record_tekrari(DataTable DT, string colName)
{
Hashtable hashTable = new Hashtable();
ArrayList duplicateList = new ArrayList();
foreach (DataRow drow in DT.Rows)
{
if (hashTable.Contains(drow[colName]))
duplicateList.Add(drow);
else
hashTable.Add(drow[colName], string.Empty);
}
foreach (DataRow dRow in duplicateList)
DT.Rows.Remove(dRow);
return DT;
}


اگه باز درباره Hashtable ها متوجه نشدی یا کلا از این بخش برات سوالی پیش اومد بگو تا جواب بدم .
امیدوارم پیرو و مموفق باشید
از کدنویسی لذت ببرید


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

moradian
پنج شنبه 03 تیر 1395, 19:47 عصر
سلام دوست عزیز، از اول می گفتین میخوام یا اسکریپت های اسکیوئل این کار رو بکنم که دوستان به خطا نیفتند و یا بهتر این بود که این موضوع رو تو بخش SQL Server (http://barnamenevis.org/forumdisplay.php?178-T-SQL) مطرح می کردین.
به قول دوست خوبمون آقای مهندس آشتیانی :قوانین انجمن رو رعایت کنید".
مورید باشید