Запрос с использованием dateadd выполняется очень долго
Я пытаюсь показать магазины, которые не обновляли свой товарный запас в течение x дней.
Районный менеджер хочет ввести номер (например, 90 или 365) и получить список всех магазинов и последних запасов, которые они заказали. Таким образом, если 90 магазинов ничего не заказывали за последние 90 дней, необходимо отобразить название магазина и все товары, которые они заказывали в последний раз.
Если я использую это:
WHERE MerchLastShippedDate = DATEADD("d", -@Days, CONVERT(VARCHAR(10),Getdate(),101))мой запрос выполняется в нормальном количестве времени. Но это не показывает мне всего, что мне нужно. Это когда я использую нижеприведенное, чтобы показать мне все, что старше, чем количество дней, которые я ввожу, что запрос занимает слишком много времени для выполнения.
Как я могу исправить это и заставить мой запрос работать быстрее?
Вот мой код:
IF object_id('tempdb..#ActiveStores') is not null BEGIN DROP TABLE #ActiveStores END SELECT DISTINCT Storename, StoreId INTO #ActiveStores FROM StoresTable Where Storestatus = 1 and Storename <> ' ' Order by StoreID IF object_id('tempdb..#MerchDays') is not null BEGIN DROP TABLE #MerchDays END Create Table #MerchDays (StoreID varchar(100), StoreName varchar(100), MerchID varchar(50), Manager varchar(100), MerchLastShippedDate datetime, MerchNumber varchar(100), QtyMerchShipped float, AmtMerchShipped float ) INSERT INTO #MerchDays (StoreID, StoreName, MerchId, Manager, MerchLastShippedDate, MerchNumber, QtyMerchShipped, AmtMerchShipped) SELECT StoreID, StoreName, MerchId, Manager, MerchLastShippedDate, MerchNumber, QtyMerchShipped, AmtMerchShipped FROM MainStoredInventoryMerchTbl WHERE MerchLastShippedDate <= DATEADD("d", -@Days, CONVERT(VARCHAR(10),Getdate(),101)) GROUP BY StoreID, StoreName, MerchId, Manager, MerchLastShippedDate, MerchNumber, QtyMerchShipped, AmtMerchShipped ORDER BY StoreID </<pre lang="SQL"> What I have tried: MSDN, Google search, stackoverflow
RossMW
Dateadd работает над полями типа даты, почему вы преобразуете его в varchar.
Кроме того, один запрос имеет "=", а другой - "<=". Если MerchLastShippeddate является полем datetime, то вероятность его равенства очень мала и, вероятно, поэтому никакие записи не возвращаются
Member 10379103
В этом случае есть записи, возвращаемые при использовании"=". Это поле отформатировано так же, как и другое. Мне нужно захватить все, что не попадает в эти дни.