Цель:
Я пытаюсь обновить все, кроме самой последней записи HR в течение данной недели.
Я написал решение ниже, но какЯ больше рассмотрел функциональность оракула, думаю, он не будет работать.
'ww' позволил бы мне разбивать только на недели - начиная с дня недели, 1 января.
'iw' будет ближе, но недели будут разделены в новом году, и с последней недели DEC останется запись - если новый год начнется в середине недели..
Однако мне просто нужно все, кроме самой последней записи - в течение этой недели (вс - сб) обновлено.
вот что ядо сих пор пытались ..:
UPDATE hr_info.hr_hours
SET expire_date = SYSDATE, deleted = 'Y', update_date = SYSDATE
WHERE (ROWID, compnay_id) IN (SELECT ROWID, compnay_id
FROM (SELECT hrs.*,
ROW_NUMBER ()
OVER (
PARTITION BY emp_nbr,
TO_CHAR (
hrs_effective_date + 1,
'iw'),
TO_CHAR (
hrs_effective_date,
'yy')
ORDER BY
hrs_effective_date DESC)
rown
FROM hr_info.hr_hours hrs
WHERE compnay_id = 3
AND expire_date =
TO_DATE ('12/31/9999',
'mm/dd/yyyy'))
WHERE rown > 1;
COMMIT;
запрашиваемые данные примера:
Так что в этом примере я боюсь, что 1 декабря будет считаться его неделей с 'iw'.Я просто хотел бы сохранить / не обновлять запись 1/4 для сотрудника 22 и запись 1/5 для сотрудника 33 и запись 1/2 для сотрудника 44.
И это всего лишьнебольшой снимок данных. Предполагается, что записи будут создаваться гипотетически каждую неделю - на год назад для каждого сотрудника .