2012-05-24 25 views
6

Quiero crear una matriz de la cantidad de elementos creados cada hora, cada día.rieles - grupo por día, así como la hora

Estoy rastreando cómo se siente la gente, por lo que mi modelo se llama TrackMood Simplemente tiene una columna llamada mood y las marcas de tiempo.

Si hago

TrackMood.where(mood: "good").group("hour(created_at)").count 

me sale algo así como {11 => 4, 12 => 2, 13 => 2, 15 => 1}

Tengo 2 números aquí

1 ¿Cómo agrego el día a esto así que no solo agrega los elementos creados ayer a las 11 en punto a los artículos que se agregaron hoy a las 11 en punto?

2 ¿Cómo me aseguro de que diga 0 durante horas cuando no se crea nada?

Respuesta

9

1) En lugar de agrupar solo en la parte de horas de la fecha, deberá agrupar parte de la fecha relevante, es decir, la fecha hasta las horas y sin incluir nada más específico que eso. P.ej.

TrackMood.where(mood: "good").group("date_format(created_at, '%Y%m%d %H')").count 

2) Siempre obtendrá un hash de esta llamada incluso si no encuentra ningún grupo. Si desea verificar cuántos grupos hay, puede llamar al .size o al .count.

+0

brillante para q 1. Para la segunda parte, no puedo haber sido claro. Me gustaría que 14 => 0 esté en el hash si no se crean elementos en esa hora. – Edward

+0

Ah, lo siento, está bien, lo entiendo ahora. Para ser honesto, es mejor que agregue los grupos vacíos luego usando ruby ​​en lugar de pedirle a la capa de persistencia que los proporcione. – Shadwell