Thread: Вывести последнюю цену товара и когда она была назначена.

Добрый день

Есть таблица tov(x,tname)

И есть таблица price(x,dat::tz, sum::money)

Необходимо вывести таблицу

tov.x, tov.tname, price.dat, price.sum

По всем значениям из таблицы tov, причём поля dat и sum должны выводиться только последние значения по дате, либо NULL.

Это можно сделать через триггер и дополнительные поля, но можно ли это сделать через а-ля SELECT

Никак не соображу.

Подскажите, пожалуйста!

> Добрый день
> Есть таблица  tov ( x , tname )
> И есть таблица  price ( x , dat :: tz ,  sum :: money )
> Необходимо вывести таблицу
> tov.x, tov.tname, price.dat, price.sum
> По всем значениям из таблицы  tov , причём поля  dat и  sum должны выводиться только последние значения по дате, либо
NULL . 
> Это можно сделать через триггер и дополнительные поля, но можно ли это сделать через а-ля  SELECT
> Никак не соображу.

select tov.x. tov.name, price.dat, price.sum
from tov left outer join lateral(select * from price where price.x=tov.x order by price.dat desc limit 1) on true



привет!

с lateral только с версии 9.3. у меня же есть вариант
с оконной функцией rank(), которая даже в 8.4. есть)

select tov.x, tov.tname, pr.dat, pr.sum
from tov
     left join (
         select x, dat, sum
             , rank() over(partition by x order by dat desc)
         from price
     ) pr on pr.x = tov.x
         and pr.rank = 1;

On 02/09/2016 02:50 PM, Иван Фролков wrote:
>> Добрый день
>> Есть таблица  tov ( x , tname )
>> И есть таблица  price ( x , dat :: tz ,  sum :: money )
>> Необходимо вывести таблицу
>> tov.x, tov.tname, price.dat, price.sum
>> По всем значениям из таблицы  tov , причём поля  dat и  sum должны выводиться только последние значения по дате,
либо NULL . 
>> Это можно сделать через триггер и дополнительные поля, но можно ли это сделать через а-ля  SELECT
>> Никак не соображу.
> select tov.x. tov.name, price.dat, price.sum
> from tov left outer join lateral(select * from price where price.x=tov.x order by price.dat desc limit 1) on true
>
> 
>
--
Dmitriy Olshevskiy