Member 10379103 Ответов: 1

Соединять таблицу саму с собой


Мой окружной менеджер хочет, чтобы отчет показал все магазины, которые не заказывали товары с распределительного склада в течение 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 дней.

1 Ответов

Рейтинг:
0

Patrice T

Я думаю, что таблица "все в 1" - это проблема концепции, которую вы должны решить.

Я не программист SQL, но знаю, как работают базы данных.
1) постройте временную таблицу всех магазинов
2) найдите последний заказ для каждого магазина
3) фильтруйте нежелательные магазины
Из-за проблемы с таблицей "все в 1" изменения заключаются в том, что она будет крайне неэффективной.
С магазинным столом было бы легко хранить дату последнего заказа.