2016-04-10 17 views
0

Bu benim basitleştirilmiş geçmiş tablosu yapısı şöyledir:MySQL: Tarih tablosundaki fiyat değişikliği nasıl alınır?

id | property_id | price | created_at   | updated_at   | deleted_at 
1 |  1  | 100 | 2016-04-10 01:00:00 | 2016-04-10 01:00:00 | NULL 
2 |  1  | 300 | 2016-04-10 01:00:00 | 2016-04-10 01:00:00 | NULL 
3 |  1  | 300 | 2016-04-10 02:00:00 | 2016-04-10 02:00:00 | NULL 
4 |  2  | 200 | 2016-04-10 03:00:00 | 2016-04-10 03:00:00 | NULL 
1 |  2  | 150 | 2016-04-10 04:00:00 | 2016-04-10 04:00:00 | NULL 
  1. i created_at alan son 24 saat içinde, özellikle bu, belli ölçütlere uyan kayıtları almak istiyorum
  2. i almak gerekir hemen olan price kolonu kaydın tarihinde farklı bir değere sahip olan kayıtlara # da 1. 1
  3. diğer filtre sonuçları kayıtları önce gelen kayıt, diğerinden daha -1
012.351.

Özellikle # 2 ve # 3'te problemleri çözüyorum özellikle sonuçları filtreliyorum. Çok fazla veriye sahip olduğumdan ve bunu yapmak için çok zaman alacağımdan, # 1 sonuçlarını döngüsel olarak yapmak istemiyorum. Herhangi biri bir sorguda yapmama yardım edebilir mi?

+0

Cevabım bir soruyla başlar: En güncel fiyat tarih tablosunda mı depolanır? –

+0

Evet. En son eklenen property_id, geçerli fiyata sahip. – kmligue

cevap

2

Akla gelen şey, önceki fiyatı almak için ilişkili bir alt sorgudır.

select h.*, 
     (select h2.price 
     from history h2 
     where h2.property_id = h.property_id and 
       h2.created_at < h.created_at 
     order by h2.created_at desc 
     limit 1 
     ) as prev_price 
from history h 
where h.created_at > date_sub(now(), interval 1 day) 
having prev_price is null or prev_price <> price; 

performans için, size history(created_at) ve history(property_id, created_at, price) dizinleri istiyorum: Aşağıdaki versiyonu nihai karşılaştırma için having maddesi (a alt sorgu da kullanılabilir) kullanır.

+0

Teşekkürler. Bunu bir – kmligue

+0

deneyin Vereceğim Sorun, iç içe geçmiş sorgu düzgün sipariş emin olmadan, sormak istediğiniz sormadan başka bir yanıt ile size sunabilir. Performans açısından bakıldığında, genellikle bir satır içi korelasyonlu alt sorgu bir performans isabeti alır. YMMV –

+0

@TGray. . . Ne demek istediğine emin değilim. Alt sorgunun bir "order by" maddesi vardır. –

İlgili konular