Как правильно офрмить запрос

Суть проблемы: Мне надо вначале получить определенные новости с запроса по критериям, а потом с помощью ROW_NUMBER() получить опред количество этих новостей.

Запросы которые у меня есть:

WITH news 
AS (SELECT ROW_NUMBER() OVER (ORDER BY creation_date DESC) 
AS row_id, news_id, author_id, tittle, news_text, creation_date FROM news) 
SELECT * 
FROM news 
WHERE (row_id BETWEEN 1 AND 3)

и

SELECT * FROM news
WHERE to_tsvector(tittle) @@ to_tsquery('tags')

Вот что мне примерно надо, но это выдает ошибку

SELECT * FROM news AS news1 
WHERE to_tsvector(title) @@ to_tsquery('ta') OR title LIKE '%ta%' 
WITH news1 AS (
    SELECT ROW_NUMBER() OVER (ORDER BY creation_date DESC) AS row_id, 
    news_id, 
    author_id, 
    title, 
    news_text, 
    creation_date 

    FROM news), 
news2 AS (
    SELECT * 
    FROM news1 
    WHERE (row_id BETWEEN 1 AND 2)
    )

Ответы (1 шт):

Автор решения: Hany

Таблицы идут по порядку. Первый запрос такой

    SELECT * FROM news
    WHERE to_tsvector(title) @@ to_tsquery('ta') OR title LIKE '%ta%' 

Он выдаёт результат. Если к результату этого запроса нужно опять обратиться, то можно представить его ввиде with

WITH temp_news AS (
    SELECT * FROM news
    WHERE to_tsvector(title) @@ to_tsquery('ta') OR title LIKE '%ta%' 
)

Теперь к этому запросу можно обратиться как будто он таблица, только имя таблицы уже будет не news как в первом варианте, а temp_news. Теперь можно сделать с новым запросом тоже самое. В итоге весь код может выглядеть так:

WITH temp_news AS
(
    SELECT * FROM news
    WHERE to_tsvector(title) @@ to_tsquery('ta') OR title LIKE '%ta%' 
),

result_news AS 
(
    SELECT ROW_NUMBER() OVER (ORDER BY creation_date DESC) AS row_id, 
    news_id, 
    author_id,
    title, 
    news_text, 
    creation_date 
    FROM temp_news
)

SELECT * 
FROM result_news 
WHERE (row_id BETWEEN 1 AND 2)
→ Ссылка