Re: an difficult SQL
От | Rafal Pietrak |
---|---|
Тема | Re: an difficult SQL |
Дата | |
Msg-id | f8bb7ecf-11bd-a271-a74d-9fd3032eb912@ztk-rp.eu обсуждение исходный текст |
Ответ на | Re: an difficult SQL (Erik Wienhold <ewie@ewie.name>) |
Список | pgsql-general |
Great, with a little tweaking (to get the remaining rows ordered correctly), this did the job. Thank you Erik. BR -R W dniu 6.11.2022 o 15:23, Erik Wienhold pisze: >> On 06/11/2022 13:48 CET Rafal Pietrak <rafal@ztk-rp.eu> wrote: >> >> W dniu 5.11.2022 o 19:05, Thiemo Kellner pisze: >>> >>> You first could select the three users with the most recent entries with >>> a windowing function >>> (https://www.postgresql.org/docs/15/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS) >> >> surely I'm missing something crucial here: >> select row_number() over w,* from eventlog where row_number() over w < 5 >> window w as (partition by user); >> ERROR: window functions are not allowed in WHERE >> >> So I'm unable to pick a limited number of rows within the user >> "group-window" ranges. >> >> Without that, I cannot proceed. >> >> Any suggestions? > > Windows functions are only permitted in SELECT and ORDER BY because they are > executed after WHERE, GROUP BY, and HAVING[1]. > > You need a derived table to filter on row_number: > > with > ranked as ( > select *, row_number() over w > from eventlog > window w as (partition by user) > ) > select * > from ranked > where row_number < 5; > > [1] https://www.postgresql.org/docs/15/tutorial-window.html > > -- > Erik > >
В списке pgsql-general по дате отправления: