2016-04-01 11 views
0

oyuncuların, takip ettikleri tarihlerin son skorlarını & tuttuğum bir masa var diyelim.Bir oyuncu için puan veya puanlama değişiklikleri tespit etmek için SQL

örnek kayıtlar i (önceki puanına karşılaştırın)

nasıl verimli bir sorgu yazmak için belirli bir günde aldıkları puanlara veya dereceye içinde% 80 düştü tüm bu oyuncuları bilmek istiyorum
playerA 100 March3 
playerA 120 March4 
playerA 10 March10 
playerB 89 March11 
playerB 50 March11 
playerC 200 March12 

vardır bu etrafında?

+0

Sen kullandığınız veritabanı ile Sorgunuzla etiketlemelisiniz. –

+0

, March3 a datetime colum ya da yerleştirdiğiniz gibi basit bir nvarchar mı? – thepanch

+0

İlk olarak tablonuzun özellikle tarih alanı gibi doğru alan türlerine sahip olduğundan emin olun. Programlama dilinizde yapmayı düşünün, çünkü dilin sorgulanmasında (örneğin SQL) çok karmaşık olması muhtemeldir. –

cevap

1

ANSI standart yöntemi lag() kullanmaktır. Bu, son sütunun bazı belirsiz bir dize temsili değil, iyi niyetli bir tarih olduğunu varsayar.

fikirdir:

select t.* 
from (select t.*, lag(score) over (partition by player order by date) as prev_score 
     from t 
    ) t 
where prev_score <= score * (1 - 0.8) 
+0

çalışmıyor, anahtar kelimeyle ilgili sözdizimi doğru mu? – kapilSpring

+0

@ kapilSpring. . . Sözdizimi, çoğu veritabanları olan ANSI uyumlu pencere işlevlerini destekleyen veritabanları için doğrudur. Sorunuzu, kullanılan veritabanıyla etiketlemediniz. –

İlgili konular