Как стать автором
Обновить
0
0
Дмитрий Волков @ZMB138

Пользователь

Отправить сообщение

Окурки всплывают, можно сортировать в воде. Окурки легче, можно сортировать по весу. Если очень хочется в высокие технологии, можно по аналогии с сортировщиком помидоров - весь песок прогоняется через сито, крупные объекты после этого ссыпаются, окурки распознаюся и манипуляторы их из общего потока отбрасывают в мешок.

Можно придумать более простые и продуктивные решения, которые будут и быстрее, и качественнее убирать окурки даже в толще песка.

в 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

ну можно так искать любые данные из последней строки
Заголовок спойлера
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.*, x.price1 price1x
from price p
left join (
select stock_id, prod_id, price1, row_number() over (partition by stock_id, prod_id order by start_date desc) x
from price 
where kind = 'R') x on x.x = 1 and x.stock_id = p.stock_id and x.prod_id = p.prod_id

Есть предположение, что с графиками «счастья» перепутаны причина и следствие. Люди несчастные не потому что долго сидят на фейсбуке, а долго сидят на фейсбуке, потому что несчастливы. Убивают там время за неимением лучшего развлечения.
И если оторвать их от телефона… То они залипнут в компьютер. Телевизор. Книгу.
А нет, они сразу же найдут лучших друзей и побегут активно проводить время.
Рак щитовидной железы — это последствия от йода-131. С его периодом полураспада 8 дней им облучиться могли только в первые недели после аварии.
А вот остальные изотопы действуют не так избирательно, поэтому могут провоцировать рак любого органа, вот только опеределить, что это из-за Чернобыля — не представляется возможным. Хотя эти изотопы могут быть живы до сих пор.

Информация

В рейтинге
Не участвует
Откуда
Киев, Киевская обл., Украина
Дата рождения
Зарегистрирован
Активность