#sql #oracle #where-clause #min
#sql #Oracle #where-предложение #мин
Вопрос:
Мне нужно выбрать только те строки, где МИНИМАЛЬНАЯ дата 7 дней назад. У меня есть клиенты со счетами-фактурами, у счетов-фактур есть сроки оплаты. Я могу выбрать минимальную дату оплаты этих счетов для каждого клиента. Теперь я застрял, поскольку не могу выбрать только клиентов, у которых просрочено ровно 7 дней с их самым старым счетом.
Это то, что у меня есть:
select
customerID,
MIN(dueDate) as min_due_date
from invoices
where (invoiceStatus NOT IN ('PaidPosted','Cancelled'))
and (entity = 'HQ')
group by (customerID)
Я попытался добавить:
and min_due_date = dateadd(day, -7, SYSDATE())
Это не работает.
Что я делаю не так?
Спасибо.
Комментарии:
1. Я просматривал сайт уже более часа, и мне не повезло найти похожий случай.
2. Пометьте свой вопрос базой данных, которую вы используете.
3. Является ли бренд базы данных = MySQL?
Ответ №1:
Используйте having
предложение для фильтрации минимальной даты:
select customerID, min(dueDate) as min_due_date
from invoices
where invoiceStatus not in ('PaidPosted', 'Cancelled') and
entity = 'HQ'
group by customerID
having min(duedate) = current_date - interval '7 day';
Обратите внимание, что функции даты сильно зависят от базы данных. Приведенный выше стандартный SQL, но точный синтаксис зависит от используемой вами базы данных.
Ответ №2:
Спасибо, Гордон, ты наставил меня на правильный путь! Это то, что в конечном итоге сделало свое дело:
select customerID, min(dueDate) as min_due_date
from invoices
where invoiceStatus not in ('PaidPosted', 'Cancelled') and
entity = 'HQ'
having MIN(dueDate) = trunc(sysdate) -7
group by customerID
Комментарии:
1. В MySQL нет
trunc()
функции. Установите правильный тег в вашем вопросе.