Thread: Вывести последнюю цену товара и когда она была назначена.
Добрый день
Есть таблица tov(x,tname)
И есть таблица price(x,dat::tz, sum::money)
Необходимо вывести таблицу
tov.x, tov.tname, price.dat, price.sum
По всем значениям из таблицы tov, причём поля dat и sum должны выводиться только последние значения по дате, либо NULL.
Это можно сделать через триггер и дополнительные поля, но можно ли это сделать через а-ля SELECT
Никак не соображу.
Подскажите, пожалуйста!
Re: [pgsql-ru-general] Вывести последнюю цену товара и когда она была назначена.
From
Иван Фролков
Date:
> Добрый день > Есть таблица 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
Re: Re: [pgsql-ru-general] Вывести последнюю цену товара и когда она была назначена.
From
Dmitriy Olshevskiy
Date:
привет! с 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