Получить наиболее частый вариант, каждый день, на недельном интервале - PullRequest
0 голосов
/ 24 декабря 2018

У меня был другой вопрос, но это немного запутало, поэтому я постараюсь на этот раз все упростить.

У меня есть таблица "option":

id  |  option_name
1   "Option 1"
2   "Option 2"
3   "Option 3"
4   "Option 4"
5   "Option 5"
6   "Option 6"
7   "Option 7"

и другая таблица«пользователь» с некоторой пользовательской информацией.Затем я создал таблицу с именем daily_voting, где каждый день каждый пользователь может выбрать опцию.Это должно быть так:

user_id | option_id | timestamp
1  1  2018-12-24 00:01:00.091055-03
2  1  2018-12-24 01:01:00.091055-03
3  2  2018-12-24 02:01:00.091055-03
1  2  2018-12-25 00:01:00.091055-03
2  2  2018-12-25 00:02:00.091055-03
3  5  2018-12-26 00:02:00.091055-03

Если я сделаю:

select count(*) as votes, option_id, date_trunc('day', daily_voting.timestamp) as day
from daily_voting
where date_trunc('day', daily_voting.timestamp) = '2018-12-24 00:00:00-03'
group by option_id, day
order by votes desc
limit 1

Я бы получил:

votes | option_id | day
2    1    2018-12-24 00:00:00-03

Что мне нужно, проходя недельный диапазонс текущего дня, вероятно, с:

date_trunc('week', current_date) and date_trunc('week', current_date+7)

Запрос, где результат будет:

votes | option_id | day
2    1    2018-12-24 00:00:00-03
2    2    2018-12-25 00:00:00-03
1    5    2018-12-26 00:00:00-03

1 Ответ

0 голосов
/ 24 декабря 2018

ROW_NUMBER() даст вам ранг.

SELECT Votes, Option_ID, Day
FROM (
SELECT Votes, Option_id, day, row_number() over (partition by day order by votes DESC) AS VoteRank
FROM (
select count(*) as votes, option_id, date_trunc('day', daily_voting.timestamp) as day
from daily_voting
where date_trunc('day', daily_voting.timestamp) BETWEEN '2018-12-24' AND '2018-12-31'
group by option_id, day
)Aux ) T
WHERE VoteRank = 1

Вы можете определять диапазон дат, используя другой метод курса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...