Получение последней таблицы в виде - PullRequest
1 голос
/ 04 января 2012

Я пытаюсь создать представление, которое берет последнюю из истории каждого отдельного элемента и возвращает ее подряд.Запрос, который я хочу выполнить, выглядит следующим образом:

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

Есть ли способ получения ожидаемых значений с помощьюпосмотреть, или есть лучший способ получить значения?

1 Ответ

1 голос
/ 05 января 2012

Вы хотите создать свой вид:

create view item_latest as
select
  id, 
    max(occurred) as latestoccurred 
from 
    item_name 
group by
    id;

create view item as
select
    i1.id,
    i1.value
from
    item_name i1
    inner join item_latest i2 on
        i1.id = i2.id
        and i1.occurred = i2.latestoccurred;

Он захватывает только элементы, у которых значение occurred наибольшее occurred для этого id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...