Как осуществить дополнительный запрос или выборку дополнительных записей?

  • 12 сентября 2023 г. 23:56
Ответы на вопрос 2
Для осуществления дополнительного запроса или выборки дополнительных записей вам потребуется выполнить два отдельных запроса и объединить их результаты.

Первый запрос:
SELECT date FROM `list` WHERE user='1' ORDER BY date DESC, id DESC LIMIT 1
Этот запрос получит дату последней записи в таблице.

Второй запрос:
SELECT * FROM `list` WHERE user='1' AND date = (результат первого запроса) ORDER BY date DESC, id DESC
Этот запрос найдет все записи с такой же датой, как у последней записи.

Для объединения результатов двух запросов, вы можете использовать UNION ALL:
SELECT * FROM
((SELECT * FROM `list` WHERE user='1' ORDER BY date DESC, id DESC LIMIT 0, 25)
UNION ALL
(SELECT * FROM `list` WHERE user='1' AND date = (результат первого запроса) ORDER BY date DESC, id DESC)) AS combined_result
ORDER BY date DESC, id DESC

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

Обратите внимание, что данное решение может быть неоптимальным при большом объеме данных. В таких случаях рекомендуется применить индексы к столбцам, используемым в запросах, чтобы ускорить выполнение запросов по таблице.
WITH 
cte AS (
    SELECT * , 
           ROW_NUMBER() OVER (ORDER BY date DESC, id DESC) AS rn, 
           DENSE_RANK() OVER (ORDER BY date DESC, id DESC) AS dr
    FROM `list` 
    WHERE user='1' 
    )
SELECT *
FROM cte
WHERE dr <= (
    SELECT dr
    FROM cte
    WHERE rn = 25
    ) 
Похожие вопросы