Окурки всплывают, можно сортировать в воде. Окурки легче, можно сортировать по весу. Если очень хочется в высокие технологии, можно по аналогии с сортировщиком помидоров - весь песок прогоняется через сито, крупные объекты после этого ссыпаются, окурки распознаюся и манипуляторы их из общего потока отбрасывают в мешок.
Можно придумать более простые и продуктивные решения, которые будут и быстрее, и качественнее убирать окурки даже в толще песка.
в partition надо разделить на отдельные строки из основной таблицы, поэтому туда надо ещё и kind добавить, вместе в роли сборного идентификатора строки. Остальные поля добавляются в left join (...) x, таблица соединяется со всеми строками себя же из x с датой меньшеравно исходной, и уже оконная оставляет последнюю дату.
Но, конечно, вариант более громоздкий.
Если надо последняя реальная цена на дату, то тогда что-то из разряда outer apply из TSQL (в Postreg чуть иначе но тоже есть и работает)
with price(stock_id, prod_id, start_date, kind, price1, cost1, bonus1) as (
values (1,1,to_date('2000-01-01','YYYY-MM-DD'),'R',100.0,32.12,6.49),
(1,1,'2000-01-02','P', 80.0, 0, 0),
(1,1,'2000-01-03','P', 70.0, 0, 0),
(1,1,'2000-01-04','R',110.0,33.48,6.19),
(1,1,'2000-01-05','P', 90.0, 0, 0),
(1,1,'2000-01-06','R',120.0,41.22,6.19),
(1,1,'2000-01-07','P', 80.0, 0, 0),
(1,1,'2000-01-08','P', 90.0, 0, 0),
(1,1,'2000-01-09','R', 93.0,36.87,6.49),
(1,1,'2000-01-10','R', 94.0,36.85,6.99),
(1,2,'2000-01-01','R',101.0,52.06,9.00),
(1,2,'2000-01-02','P', 81.0, 0, 0),
(1,2,'2000-01-03','P', 71.0, 0, 0),
(1,3,'2000-01-04','R',111.0,64.96,4.50),
(1,3,'2000-01-05','P', 92.0, 0, 0),
(1,3,'2000-01-06','R',122.0,66.83,4.60),
(1,3,'2000-01-07','P', 82.0, 0, 0),
(1,3,'2000-01-08','P', 92.0, 0, 0))
select p.*, z.price1 price1x
from price p
LEFT JOIN LATERAL (
select stock_id, prod_id, price1
from price x
where kind = 'R' and x.stock_id = p.stock_id and x.prod_id = p.prod_id and x.start_date <= p.start_date
order by start_date desc limit 1) z on true
либо тоже через row_number()
select *
from (
select p.*, x.price1 price1x, row_number() over (partition by p.prod_id, p.stock_id, p.start_date order by x.start_date desc) x
from price p
LEFT JOIN (
select stock_id, prod_id, start_date, price1
from price
where kind = 'R') x on x.stock_id = p.stock_id and x.prod_id = p.prod_id and x.start_date <= p.start_date
) n
where n.x = 1
Есть предположение, что с графиками «счастья» перепутаны причина и следствие. Люди несчастные не потому что долго сидят на фейсбуке, а долго сидят на фейсбуке, потому что несчастливы. Убивают там время за неимением лучшего развлечения.
И если оторвать их от телефона… То они залипнут в компьютер. Телевизор. Книгу.
А нет, они сразу же найдут лучших друзей и побегут активно проводить время.
Рак щитовидной железы — это последствия от йода-131. С его периодом полураспада 8 дней им облучиться могли только в первые недели после аварии.
А вот остальные изотопы действуют не так избирательно, поэтому могут провоцировать рак любого органа, вот только опеределить, что это из-за Чернобыля — не представляется возможным. Хотя эти изотопы могут быть живы до сих пор.
Окурки всплывают, можно сортировать в воде. Окурки легче, можно сортировать по весу. Если очень хочется в высокие технологии, можно по аналогии с сортировщиком помидоров - весь песок прогоняется через сито, крупные объекты после этого ссыпаются, окурки распознаюся и манипуляторы их из общего потока отбрасывают в мешок.
Можно придумать более простые и продуктивные решения, которые будут и быстрее, и качественнее убирать окурки даже в толще песка.
Но, конечно, вариант более громоздкий.
либо тоже через row_number()
И если оторвать их от телефона… То они залипнут в компьютер. Телевизор. Книгу.
А нет, они сразу же найдут лучших друзей и побегут активно проводить время.
А вот остальные изотопы действуют не так избирательно, поэтому могут провоцировать рак любого органа, вот только опеределить, что это из-за Чернобыля — не представляется возможным. Хотя эти изотопы могут быть живы до сих пор.