2010-11-18 30 views
0

Yani, yapmaya çalıştığım sorgu şu anda böyle görünüyor:MySQL Geçmişte Tarihler Seç: MAX ve GROUP BY ile Sorun

SELECT `jid`, MAX(`start`) as `start` FROM `dates` WHERE `start` < NOW() GROUP BY `jid` 

Tablo dates temelde bir iş ile ilişkili bir DATETIME değeri start tutar.
Muhtemelen tahmin ettiğiniz gibi, jid, başka bir masada saklanan bir işin kimliğidir.
Bir işin birçoğu dates

olabilir. Neyi başarmaya çalışıyorum, hangi işlerin geçmişte start tarihlerine sahip olduğunu bulmak.

Düşüncem, jid ile gruplanan start tarihlerinin en yüksek değerlerini seçmekti ve geçmişte olsaydı, aynı iş ile ilişkili tüm diğer tarihlerin de geçmişte olduğu anlamına gelirdi.

Bu sorgu çalışmıyor çünkü geçmişte start tarihlerini kontrol ediyor ve ardından en yüksek olanı seçiyor. Bu, gelecekte aynı iş için başka bir tarih olasılığını dışlamaz.

Şimdi nasıl ilerleyebileceğimi bilmiyorum. Herhangi bir yardım veya ipucu takdir edilir.

Şerefe - Tom

cevap

2

Sen HAVING kullanmak zorunda:

SELECT jid, MAX(start) as start 
FROM dates 
GROUP BY jid 
HAVING MAX(start) < NOW(); 

HAVING gibi biraz davranır. seçildikten sonra satırlarını filtreler. Genellikle (ve aslında, başka bir durum hakkında düşünemiyorum), sadece HAVING ile toplu işlevler kullanıyorsunuz.

(Gerçi senin tabloda size gelecekte gerçekten eklenen tarihleri ​​umut!)

+0

sayesinde, bir soru daha, sen benim tabloda gelecek tarihleri ​​umuyoruz diyorsunuz neden? – TomWilde

+0

Aksi takdirde, bu hiçbir şey döndürmez (geçmişte bir tarihiniz varsa) –