MySQL Sorgusu GROUP BY gün / ay / yıl

Bir Yıl, ay veya gün gibi belirli bir zaman diliminde kaç kaydım olduğunu saymak için bir TIMESTAMP alanına sahip basit bir sorgu yapmam mümkün mü?

SELECT COUNT(id)
FROM stats
WHERE record_date.YEAR = 2009
GROUP BY record_date.YEAR

Hatta:

SELECT COUNT(id)
FROM stats
GROUP BY record_date.YEAR, record_date.MONTH

Aylık bir istatistiğe sahip olmak.

Teşekkürler!

Çözüm
GROUP BY YEAR(record_date), MONTH(record_date)

MySQL'deki tarih ve saat işlevlerine göz atın.

Yorumlar (4)
GROUP BY DATE_FORMAT(record_date, '%Y%m')

Not (öncelikle potansiyel olumsuz oy verenler için). Şu anda bu, diğer öneriler kadar verimli olmayabilir. Yine de, bunu bir alternatif olarak bırakıyorum ve diğer çözümlerin ne kadar hızlı olduğunu görmeye de hizmet edebilir. (Çünkü aradaki farkı görene kadar hızlı ile yavaş arasındaki farkı anlayamazsınız) Ayrıca, zaman geçtikçe MySQL'in motorunda optimizasyonla ilgili değişiklikler yapılabilir, böylece bu çözüm gelecekte (belki de çok uzak olmayan) bir noktada verimlilik açısından diğerleriyle karşılaştırılabilir hale gelebilir.

Yorumlar (2)

Yukarıdaki 'WHERE' ifadesini kullanmayı denedim, kimse düzeltmediği için doğru olduğunu düşündüm ama yanılmışım; bazı aramalardan sonra bunun WHERE ifadesi için doğru formül olduğunu öğrendim, böylece kod şu hale geliyor:

SELECT COUNT(id)  
FROM stats  
WHERE YEAR(record_date) = 2009  
GROUP BY MONTH(record_date)
Yorumlar (0)