2015-06-22 9 views
2

У меня около 50 тыс. Строк в базе данных Postgres, которые являются пользователями и когда они подписались.Сколько записей создано за каждый день недели в этом году?

Я пытаюсь понять, сколько пользователей подписаться на каждый день недели с начала года, например:

1238 on Monday 
3487 on Tuesday 
1237 on Wednesday 

Пример записи даты: '2014-10-31 17:17:30.138579'

ответ

1

Вы можете использовать ЭКСТРАКТ (DOW from timestamp), чтобы определить день недели. 0 - воскресенье. 6 - суббота.

Пример:

SELECT EXTRACT(DOW FROM TIMESTAMP '2015-06-22 20:38:40'); 

Результат 1 (понедельник)

1

Простой совокупный запрос после извлечения дня недели. Вы можете использовать to_char(), чтобы получить на английском языке (по умолчанию) будний день:

SELECT to_char(created_at, 'Day'), count(*) AS ct 
FROM tbl 
WHERE created_at >= date_trunc('year', now()) 
GROUP BY 1; 

Если производительность важна, EXTRACT() немного быстрее:

SELECT EXTRACT(ISODOW FROM created_at), count(*) AS ct 
FROM tbl 
WHERE created_at >= date_trunc('year', now()) 
GROUP BY 1; 

1 .. понедельник, ..., 7 .. Воскресенье.

Смежные вопросы