@101-s

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

Запрос на мой взгляд достаточно распространенный, но никак не могу его осилить, подскажите, пожалуйста:
Есть основная таблица Заказы Orders (ID, и тд)
И подчиненная таблица Заказанные товары OrdersProducts (ID, OrderID, Code и тд) где OrderID это ID из Orders
Как сделать выборку всех записей, допустим Code из OrdersProducts по последним трем OrderID ?
  • Вопрос задан
  • 66 просмотров
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вы не указали, какой именно SQL-сервер у вас. Вот варианты для MySQL:
WITH `cte` (`id`) AS (
  SELECT `ID`
    FROM `Orders`
    ORDER BY `ID` DESC
    LIMIT 3
)
SELECT DISTINCT `op`.`Code`
  FROM `cte`
  JOIN `OrdersProducts` AS `op`
    ON `op`.`OrderID` = `cte`.`id`

SELECT DISTINCT `op`.`Code`
  FROM (
    SELECT `ID`
      FROM `Orders`
      ORDER BY `ID` DESC
      LIMIT 3
  ) AS `o`
  JOIN `OrdersProducts` AS `op`
    ON `op`.`OrderID` = `o`.`id`

SELECT DISTINCT `Code`
  FROM `OrdersProducts`
    WHERE `OrderID` IN (
      SELECT `ID`
        FROM `Orders`
        ORDER BY `ID` DESC
        LIMIT 3
      )
Ответ написан
Mi11er
@Mi11er
A human...
where OrderID in (Суб запрос где выбирается 3 последних заказа)
Ответ написан
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
WITH Ranked AS (
    SELECT 
        OP.*,
        DENSE_RANK() OVER (ORDER BY O.ID DESC) R
    FROM Orders O
    JOIN OrdersProducts OP ON O.Id = OP.OrderID
) SELECT * FROM Ranked
WHERE R <= 3;


sqlize

WITH Last3Orders AS (
    SELECT TOP(3) Id FROM Orders O
    ORDER BY Id DESC 
) SELECT * FROM Last3Orders
JOIN OrdersProducts ON Last3Orders.Id = OrdersProducts.OrderID
ORDER BY OrderID DESC;


SQL editor online
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы