Postgres Выберите первое событие для пользователя каждый день между заданным периодом времени - PullRequest
0 голосов
/ 03 марта 2020

Я бы хотел получить первое событие для пользователя за каждый день между заданным периодом времени.

select  * from mytable
where eventId='123'and "time">'2020-02-11'  and "time"<'2020-02-14';

возвращает мне это

table before

Я хотел бы вернуть это

table after

Любые предложения о том, как сделать это

Обновление: Я попытался выполнить запрос и сделал несколько изменений, основываясь на предложении @Gordon Linoff: select distinct ("userId", "time"::date) from public.sensorevents t where "eventId" = '1cfb395f-8c05-4df9-8eed-b3e38edd623f' and"time" > '2020-02-11' and "time" < '2020-02-14';

Это возвращает мне правильное количество строк 21 Однако я не вижу значения
Но если я добавлю, значение select distinct ("userId", "time"::date),value from public.sensorevents t where "eventId" = '1cfb395f-8c05-4df9-8eed-b3e38edd623f' and"time" > '2020-02-11' and "time" < '2020-02-14';

на запрос, кажется, не работает, и возвращает мне 191 строку, потому что каждое значение отличается

1 Ответ

0 голосов
/ 03 марта 2020

Я бы хотел получить первое событие для пользователя за каждый день между заданным периодом времени.

Использование distinct on:

select distinct on (userid, "time"::date) *
from mytable t
where eventId = 123 and
      "time" > '2020-02-11' and
      "time" < '2020-02-14'
order by userid, "time"::date, "time";

Примечания:

  • Не используйте двойные кавычки вокруг имен столбцов. Они просто затрудняют написание и чтение запросов.
  • Избегайте использования SQL ключевых слов, таких как time, в качестве имен столбцов.
  • Я предполагаю, что eventId - это число, поэтому я отбросил одиночный цитаты.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...