Tengo este bucle:

BEGIN
  DECLARE time INT DEFAULT 1479154801;

  WHILE time <= 1481756399 DO
   SELECT time;
   SELECT COUNT(*) FROM phpbb_posts WHERE post_time BETWEEN time AND (time+86400);
    SET time = time + 86400;
  END WHILE;
END

Que funcionan como quiero, pero los resultados no están agrupados y se ven así:

+------------+
| time       |
+------------+
| 1479154801 |
+------------+

+----------+
| COUNT(*) |
+----------+
|      746 |
+----------+

+------------+
| time       |
+------------+
| 1479241201 |
+------------+

+----------+
| COUNT(*) |
+----------+
|      652 |
+----------+

...

Cuando quiero que se vea así:

+------------+----------+
| time       | COUNT(*) |
+------------+----------+
| 1479154801 |      746 |
| 1479241201 |      652 |
...

¿Cómo puedo hacerlo? Soy un novato total cuando se trata de SQL, así que muchas gracias por la ayuda.

1
M.Mar 14 dic. 2016 a las 23:15

1 respuesta

La mejor respuesta

Parece que desea información durante el día. ¿Hace esto lo que quieres?

SELECT date(from_unixtime(post_time)), COUNT(*)
FROM phpbb_posts
GROUP BY date(from_unixtime(post_time));

Encuentro las fechas mucho más intuitivas que las marcas de tiempo de Unix. Si no está de acuerdo, puede volver a convertir el valor usando unix_timestamp().

Si prefiere las fechas, puede restar una hora como:

SELECT date(date_sub(from_unixtime(post_time), interval 1 hour)) as dte, COUNT(*)
FROM phpbb_posts
GROUP BY date(date_sub(from_unixtime(post_time), interval 1 hour));

O, como sugiere el comentario, reste / sume 3600 de post_time.

1
Gordon Linoff 15 dic. 2016 a las 02:47
Funciona exactamente como quería, pero ¿cómo puedo ajustarlo en +1 hora para que coincida con mi hora local?
 – 
M.Mar
14 dic. 2016 a las 23:27
@ M.Mar Suma o resta 3600 de post_time.
 – 
Barmar
14 dic. 2016 a las 23:53