@Malkolm163

Как показать 'соседние' записи?

таблица, условно history, с полями: id, status, type, title…
Задача в том, чтобы в 1~3 запроса достать записи с конкретными status и type И предшествующие им и последующие за ними записи с тем же type.
Просто взять предыдущий и последующий id не вариант, т.к. там могут быть записи с другим type. Также доставать все записи и потом кодом получать нужные (а ненужные пропускать) тоже не вариант т.к. записей очень много
id
type
status
title
1 1 2 title
2 1 3 title
3 2 2 title
... ... ... ...
12834 1 4 title

Например, при таких данных искомый type=1 и status 3
Получается надо получить саму запись с id=2 т.к. она удовлетворяет условиям и запись с id 1 и 12834 как предшествующие и последующие с тем же type.
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
Схематично:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY id) rn
    FROM tablename
    WHERE type = @type
    )
SELECT /* DISTINCT */ t2.*
FROM cte t1
JOIN cte t2 ON t2.rn IN (t1.rn - 1, t1.rn, t1.rn + 1)
WHERE t1.status = @status
ORDER BY t2.rn
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы