Я провел несколько исследований, и я пришел к выводу, что функция DATEDIFF делает мои запросы очень медленными.SQL Server - DATEDIFF Слишком длинная функция
Ниже представлен сгенерированный запрос Entity Framework, и он выглядит достаточно удобочитаемым.
Вот Linq, который генерирует T-SQL:
model.NewTotal1Week = (from sdo in context.SubscriberDebitOrders
where
(
sdo.CampaignId == campaignId &&
(sdo.Status == (Int32) DebitOrderStatus.New_Faulty) &&
(SqlFunctions.DateDiff("week", sdo.Collections.FirstOrDefault(c => c.TxnStatus == "U").ProcessDate, DateTime.Now) <= 1)
)
select sdo).Count();
В следующем запросе, я хотел бы получить COUNT всех коллекций, которые попадают в течение 1 недели с момента они были обработаны с сегодняшнего дня ,
Есть ли кто-нибудь, кто может помочь мне избавиться от функции DATEDIFF? Я видел примеры в Интернете, но я не мог приспособить его к моему сценарию, простите меня, я еще не очень гений.
exec sp_executesql N'SELECT
[GroupBy1].[A1] AS [C1]
FROM (SELECT
COUNT(1) AS [A1]
FROM [dbo].[SubscriberDebitOrder] AS [Extent1]
OUTER APPLY (SELECT TOP (1)
[Extent2].[ProcessDate] AS [ProcessDate]
FROM [dbo].[Collections] AS [Extent2]
WHERE ([Extent1].[Id] = [Extent2].[DebitOrderId]) AND (''U'' = [Extent2].[TxnStatus])) AS [Limit1]
WHERE ([Extent1].[CampaignId] = @p__linq__0) AND (3 = [Extent1].[Status]) AND ((DATEDIFF(week, [Limit1].[ProcessDate], SysDateTime())) <= 1)
) AS [GroupBy1]',N'@p__linq__0 int',@p__linq__0=3
go
Заранее спасибо.
показать код, который генерирует этот SQL. – Hakunamatata
@Hakunamatata, я обновил свой OP с Linq, который генерирует T-SQL – Morgs