Я пытаюсь создать представление, которое берет последнюю из истории каждого отдельного элемента и возвращает ее подряд.Запрос, который я хочу выполнить, выглядит следующим образом:
SELECT item_pk.Id Id, item_name.Value Name
FROM item_pk
JOIN
(
SELECT * FROM item_name
ORDER BY Occurred DESC
) item_name ON item_name.Id = item_pk.Id
GROUP BY item_pk.Id
Этот запрос работает нормально и возвращает именно то, что я хочу, но когда я пытаюсь преобразовать его в представление, он не позволяет мне использовать подзапросы.Когда я пытаюсь:
CREATE VIEW item_name_latest AS SELECT * FROM item_name ORDER BY Occurred DESC;
CREATE VIEW item AS SELECT item_pk.Id Id, item_name.value Name
FROM item_pk
JOIN item_name_latest item_name ON item_name.Id = item_pk.Id
GROUP BY item_pk.Id
, представление item
дает неправильные результаты.Результаты, которые я получаю, точно такие же, как если бы я присоединился к item_name
напрямую без промежуточного представления, которое должно привести к исправлению порядка.То есть вместо того, чтобы получать самые новые строки на элемент из item_name
, я получаю самые старые.Вызов оператора SELECT
напрямую (а не в представлении) также приводит к неверным результатам.
Допустим, у меня есть следующие данные:
Id | Value | Occurred
1 Bob 1325697408000
1 Bobbie 1325697536000
2 Stuff 1325697822000
2 More Stuff 1325697823000
2 Latest Stuff 1325697824000
1 Roberta 1325697945000
Ожидаемый результат (и фактический результатданного запроса с подзапросом):
1 Roberta
2 Latest Stuff
Фактический результат представления:
1 Bob
2 Stuff
Есть ли способ получения ожидаемых значений с помощьюпосмотреть, или есть лучший способ получить значения?