Соединять таблицу саму с собой
Мой окружной менеджер хочет, чтобы отчет показал все магазины, которые не заказывали товары с распределительного склада в течение x дней.
Есть только одна таблица с сотнями и тысячами записей.
Таблица имеет поле OrdCreateDt. Я думаю, что мне нужно запросить эту таблицу, где поле OrdCreateDt равно <= независимо от того, сколько дней входит в округ mgr.
Но dist mgr хочет видеть номера магазинов, которые не имели заказов в течение этого же количества дней, и детали того, что было заказано до x числа дней.
Я создал этот запрос:
select t.storenum, t.storename, t.mercnum, t.ordcreatedt from all_orders t left join (select storenum from all_orders where OrdCreateDt <= dateadd("dd", -days, convert (varchar(10), getdate(),101)) ) t2 on t1.storenum =t2 storenum where OrdCreateDt < dateadd("dd", -days, convert(varchar(10), getdate(),101))
Это занимает несколько секунд для запуска. Это самый эффективный способ сделать это?
Что я уже пробовал:
Поиск Msdn, поиск Google, веб-сайт stackoverflow
Bryian Tan
хммм. Мне трудно представить себе фиктивную схему таблицы и данные. Может быть, вы сможете помочь предоставить эту информацию.
Member 10379103
Хорошо. Имя таблицы-all_orders.
Столбцы: storenum, storename, mercnum, mercqtyordered, ordcreatedt, merordnum.
Dist mgr хочет видеть информацию из таблицы all_orders для магазинов, которые не размещали заказы в течение x дней. Таким образом, он может захотеть посмотреть, какие магазины не заказывали никаких товаров за 100 дней. И он хочет увидеть детали тех магазинов, которые не заказывали Мерси в те дни.
Помогает ли что-нибудь из этого?
Peter Leow
В этом нет никакого смысла
где OrdCreateDt < dateadd("dd", - days, convert(varchar(10), getdate (), 101))
Действительно ли ему нужна информация из самой первой записи, доступной в базе данных? Полезно ли это? Вместо этого спросите его о конкретной дате начала.
Member 10379103
МГр хочет ввести количество дней, а не конкретную дату. "- Дней " может быть -10 или -30 или -365 дней.