Вопросы подзапроса SQL: «ОШИБКА: недопустимая ссылка на запись предложения FROM ...» - PullRequest
5 голосов
/ 06 сентября 2011

Проблемы с SQL (в настоящее время используется postgresql)

У меня есть этот запрос, так как мне нужно сравнить самый последний элемент и второй самый последний элемент:

SELECT p1.*, p2.price_cents FROM "prices" p1 
  INNER JOIN 
    (
      SELECT price_cents, game_id from prices as p WHERE p.game_id = p1.game_id 
        ORDER BY p.created_at DESC LIMIT 1 OFFSET 1
    )
  p2 ON p2.game_id = p1.game_id 

Это приводит к нескольким ошибкам:

ERROR:  invalid reference to FROM-clause entry for table "p1"
LINE 1: ...AND p.game_id = p1.game_id...
                           ^
HINT:  There is an entry for table "p1", but it cannot be referenced from this part of the query.

Есть ли какая-то причина, по которой я не могу получить доступ к p1 из этого подвыбора, это проблема существования, так как данные p1 еще не доступны? Есть ли другой способ сделать это с помощью JOIN?

1 Ответ

2 голосов
/ 06 сентября 2011

Попробуйте это

SELECT p1.*, (
    SELECT price_cents 
    FROM "prices" p 
    WHERE p1.game_id = p.game_id  
    ORDER BY p.created_at DESC LIMIT 1 OFFSET 1
) as price_cents 
FROM "prices" p1 

ОБНОВЛЕНИЕ в соответствии с комментариями авторов

Если вам нужно более одного столбца из второй последней записи, вы можете попробовать следующий фрагмент

SELECT * FROM (
    SELECT p.*, (
        SELECT id 
        FROM "prices" 
        WHERE p.game_id = game_id  
        ORDER BY created_at DESC LIMIT 1 OFFSET 1
    ) AS second_id 
    FROM "prices" p
) p1 INNER JOIN "prices" p2 ON p1.second_id = p2.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...