سؤال
لدي جدول الإسكان القوائم.وأود أن الحفاظ على الحد الأقصى من 10 قوائم في المدينة.(معظم المدن لديها أقل من 10 القوائم).
عندما أفعل هذا الاستعلام:
select city, count(city) as cityCount from tREaltyTrac group by city
SQL العوائد:
Acampo 1
Acton 1
Adelanto 20
Agua Dulce 1
Aguanga 1
Akron 19
Albany 12
Albion 3
Alexandria 14
Algonac 1
Alhambra 5
حتى أديلانتو, Akron, ألباني ، الإسكندرية يجب أن تقطع إلى 10 فقط القوائم التي أمر بها مؤخرا حقل التاريخ والوقت يسمى 'إنشاء' (النظام عن طريق إنشاء desc).
يمكن أن يفكر أحد الإجراءات التي من شأنها خفض قوائم العودة كما وصفه ؟
المحلول
لا حلقة!
أنا أفضل وسم ال الصفوف مع الوضع ، ولكن هذا سوف تفعل ما تريد وحذفها...
جرب هذا (sql server)
إعداد الجدول
create table tREaltyTrac (city varchar(20),creation datetime)
insert into tREaltyTrac values ('Acampo' ,getdate()) --1
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Acton' ,getdate()) --1
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Adelanto' ,getdate()) --20
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Agua Dulce' ,getdate()) --1
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Aguanga' ,getdate()) --1
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Akron' ,getdate()) --19
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albany' ,getdate()) --12
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albany' ,getdate()) --12
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albany' ,getdate()) --12
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albany' ,getdate()) --12
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albany' ,getdate()) --12
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albany' ,getdate()) --12
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albany' ,getdate()) --12
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albany' ,getdate()) --12
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albany' ,getdate()) --12
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albany' ,getdate()) --12
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albany' ,getdate()) --12
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albany' ,getdate()) --12
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albion' ,getdate()) --3
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albion' ,getdate()) --3
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Albion' ,getdate()) --3
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alexandria' ,getdate()) --14
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Algonac' ,getdate()) --1
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alhambra' ,getdate()) --5
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alhambra' ,getdate()) --5
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alhambra' ,getdate()) --5
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alhambra' ,getdate()) --5
waitfor delay '00:00:01'
insert into tREaltyTrac values ('Alhambra' ,getdate()) --5
عرض الجدول القيم
select city,count(*) from tREaltyTrac group by city
select * from tREaltyTrac
حذف الصفوف كنت لا تريد
delete from tREaltyTrac
from tREaltyTrac
inner join (select
city,creation, row_number() over(partition by city order by city) AS RankValue
from tREaltyTrac
) dt on tREaltyTrac.city=dt.city AND tREaltyTrac.creation=dt.creation
where dt. RankValue>10
تظهر الصفوف كنت قد تركت
select * from tREaltyTrac
select city,count(*) from tREaltyTrac group by city
نصائح أخرى
وشيء من هذا القبيل ينبغي أن تأخذ الرعاية من ذلك بالنسبة لك، ولكن حذف السجلات تلقائيا ليست فكرة عظيمة. تريد ان تكون أفضل حالا باستخدام العلم النشط.
DECLARE @CityName VARCHAR(30)
DECLARE CitiesOver10 CURSOR FOR select city from tREaltyTrac group by city having count(city)>10
OPEN CitiesOver10
FETCH NEXT FROM CitiesOver10 INTO @CityName
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM
dbo.tREaltyTrac
WHERE
ID NOT IN (SELECT TOP 10 ID FROM dbo.tREaltyTrac WHERE city = @CityName ORDER BY Creation DESC)
AND City = @CityName
FETCH NEXT FROM CitiesOver10 INTO @CityName
END
CLOSE CitiesOver10
DEALLOCATE CitiesOver10
ويجب أن لا حذف السجلات من قاعدة بيانات. هذه ليست مثالية 100٪ وأنا متأكد من أن هناك طرق أفضل للقيام بذلك، ولكن هنا يا الذهاب.
declare @cities (CityName nvarchar(50), ID int identity(1,1))
declare @returns (CityName nvarchar(50), Blah nvarchar(50))
declare @cityname nvarchar(50)
declare @count int
declare @i int
insert into @cities (CityName)
select distinct CityName
from tblCities
select @count = count(*) from @cities
set @i=1
while (@i<=@count)
begin
select @cityname = CityName from @cities where ID=@i
select top 10 *
from tblCities
where CityName=@cityname
order by Creation desc
set @i=@i+1
end
ليس لدي الوقت لكتابة رمز الفعلي الآن ولكن ماذا عن شيء مثل هذا....(يفترض PHP)
- النظام الأولي الخاص بك الاستعلام - إضافة إنشاء DESC
- حلقة من خلال النتائج و الحصول على تاريخ إنشاء 10 نتيجة
- تشغيل استعلام آخر أن يحذف كل شيء أقل من قيمة إنشاء لمدة 10 النتيجة ؟ - أي حذف حيث خلق < $creationDateOfTenthResult
نأمل أن يجعل الشعور...
وأود أن تحديد المراكز العشرة الأولى، رمى بها في جدول مؤقت، حذف الأصلي وملء ذلك مع جدول مؤقت.
ويعتمد على إصدار SQL. شيئا مشابها لهذا يمكن أن تعمل
وSELECT r.City، ب. * من tREaltyTrac ص انضمام tREaltyTrac ب على b.Id في (اختيار أفضل 10 رقم من tREaltyTrac حيث معرف = r.Id ترتيب بواسطة Id هنا للتفاصيل) مجموعة من r.City