2011-07-26 7 views
12

Tengo una tabla con las órdenes de compra almacenadas en ella. Cada fila tiene una marca de tiempo que indica cuándo se realizó el pedido. Me gustaría poder crear un informe que indique la cantidad de compras por día, mes o año. Pensé que haría un simple SELECT COUNT (xxx) FROM tbl_orders GROUP BY tbl_orders.purchase_time y obtendría el valor, pero resulta que no puedo GROUP BY una columna timestamp.PostgreSQL - ¿GRUPO POR valores de marca de tiempo?

¿Hay alguna otra manera de lograr esto? Idealmente, me gustaría una solución flexible para poder usar el marco de tiempo que necesite (por hora, mensual, semanal, etc.). ¡Gracias por cualquier sugerencia que pueda dar!

+1

¿Qué error le da cuando intenta agrupar por una columna de marca de tiempo? Parece que funciona bien aquí, teniendo en cuenta que las marcas de tiempo deben ser idénticas (hasta el microsegundo, o cualquiera que sea la resolución mínima) para agruparlas. – Anomie

Respuesta

11

Agrupar por una columna de marca de tiempo funciona bien aquí, teniendo en cuenta que incluso una diferencia de 1 microsegundo evitará que se agrupen dos filas.

Para agrupar por períodos de tiempo mayores, agrupe por una expresión en la columna de marca de tiempo que devuelve un valor truncado apropiadamente. date_trunc puede ser útil aquí, como puede to_char.

+0

La función date_trunc era exactamente lo que estaba buscando. ¡Gracias! – Shadowman

15

Esto funciona sin la función date_trunc (más fácil de leer).

select created_on::DATE from users group by created_on::DATE 

Lo que estamos haciendo aquí es emitir el valor original en una FECHA representación de los datos horarios en este valor intrascendente.

+1

exactamente lo que estaba buscando, se convierte en una fecha como "2016-06-27", cuenta fácil de contestar (*) en el día –

+0

No creo que la marca de fecha y hora de la transmisión a DATE funcione en Group By, ya que no funciona para mi – hky404

Cuestiones relacionadas