За исключением пояснения, которое я запросил в комментарии к вашему вопросу (касающегося того, «как мы можем узнать сегодняшний итоговый счет сегодня, когда сегодня еще не закончился), проблема может быть решена по следующим направлениям.Вы не предоставили пример данных.
В своей таблице выберите только те строки, в которых соответствующая ДАТА находится между «сегодня» - 7 и «сегодня» (так что на самом деле есть восемь дней: семь дней, предшествующих сегодня, и сегодня). Затем сгруппируйте по PRICEINDEX. Подсчитайте общее количество строк для каждой группы и подсчитайте количество строк только для слова «сегодня». Число строк для слова «сегодня» должно быть менее чем в 1/8 от общего числа (это простая алгебра:эквивалентно тому, чтобы быть в 1/7 раза меньше числа ДРУГИХ дней).
Такие условия на уровне группы должны быть указаны в предложении HAVING.
select priceindex
from your_table
where datefield >= trunc(sysdate) - 7 and datefield < trunc(sysdate) + 1
group by priceindex
having count(case when datefield >= trunc(sysdate) then 1 end) < 1/8 * count(*)
;
РЕДАКТИРОВАТЬ ОП пояснил, что запрос выполняется каждый день в полночь, это означает, что «сегодня» должен фактически означать «вчера» (день, который только что закончился). В Oracle, и, вероятно, во всехвычисление, полночь относится к дню, который начинается в полночь, а не к концу, который заканчивается в полночь.Время дня в полночь - 00:00:00 (начало нового дня), а не 24: 00: 00.
Таким образом, приведенный выше запрос нужно будет немного изменить:
select priceindex
from your_table
where datefield >= trunc(sysdate) - 8 and datefield < trunc(sysdate)
group by priceindex
having count(case when datefield >= trunc(sysdate) - 1 then 1 end)
< 1/8 * count(*)
;