2016-03-30 12 views
0

Bu sorguya takılıyorum. Tarihe göre bir grup yapmam gerekiyor, card_id ve sadece en yüksek isabetleri göster. tarih, card_id tarafındanmysql grubu ve her gün için sadece en yüksek değeri filtrele

SELECT DATE(card.create_date) `day`, `name`,card_model_id, count(1) hits 
FROM card 
Join card_model ON card.card_model_id = card_model.id 
WHERE DATE(card.create_date) >= DATE(DATE_SUB(NOW(), INTERVAL 1 MONTH)) AND card_model.preview = 0 
GROUP BY `day`, card_model_id 
; 

Gruba istediğiniz anda

date  card_name  card_id hits 
29/02/2016 Paul Stanley 1345 12 
29/02/2016 Phil Anselmo 1347 16 
25/02/2016 Dave Mustaine 1349 10 
25/02/2016 Ozzy   1351 17 
23/02/2016 Jhonny Cash  1353 13 
23/02/2016 Elvis   1355 15 
20/02/2016 James Hethfield 1357 9 
20/02/2016 Max Cavalera 1359 12 

Benim sorgu ve daha yüksek isabet tarihten başına yalnızca bir satır gösteren sonuç filtre: Bu veri var. Ben tarafından grubuyla bir max (hit) çalıştırmak ama

Beğen çalışmaz Sanki: Bu konuda

date  card_name  card_id hits 
29/02/2016 Phil Anselmo 1347 16 
25/02/2016 Ozzy   1351 17 
23/02/2016 Elvis   1355 15 
20/02/2016 Max Cavalera 1359 12 

Herhangi ışık takdir edilecektir. Okuduğunuz için teşekkürler.

+0

Sorguda iki tablo var. Örnek verileriniz yalnızca bir tane var. –

cevap

2

İşte bunu yapmanın bir yolu var. senin numunenin veri (değil sorgu) dayalı olarak:

select s.* 
from sample s 
where s.hits = (select max(s2.hits) 
       from sample s2 
       where date(s2.date) = date(s.date) 
       ); 

Sizin teşebbüs sorgu örnek verilerine hiçbir ilişkisi var gibi görünüyor, yüzden bu tabloları birleştirmek için nasıl belli değildir (teşebbüs sorgu farklı sütunlar vardır ve iki masa).

İlgili konular