Это звучит как очень сложный набор логики обработки. У вас есть обоснование того, что вы пытаетесь достичь, и это объяснит это? Я подозреваю, что просто написать запрос для вас не сильно продвинет ваше понимание.
Тем не менее, вот запрос по большей части в любом случае, я полагаю, что ваши таблицы достаточно малы, что это будет работать достаточно хорошо без вызова функций окна:
DECLARE @QueryDate DATETIME = GETDATE();
DECLARE @DaysBefore INT = 3;
SELECT
FileName = Table1.Filename,
OnThisDay = COALESCE(OnQueryDate.Tally, 0),
BeforeThisDay = COALESCE(BeforeQueryDate.Tally, 0)
FROM
Table1
OUTER APPLY
(
SELECT Tally = COUNT(1) FROM Table2 WHERE Table2.FileName = Table1.Filename AND
Table2.InsertedDate BETWEEN CONVERT(date, @QueryDate) AND DATEADD(DAY, 1, CONVERT(date, @QueryDate))
) AS OnQueryDate,
OUTER APPLY
(
SELECT Tally = COUNT(1) FROM Table2 WHERE Table2.FileName = Table1.Filename AND
Table2.InsertedDate BETWEEN DATEADD(DAY,[email protected],CONVERT(date, @QueryDate) AND CONVERT(date, @QueryDate)
) AS BeforeQueryDate
WHERE
Table1.FileUploaded = 1
AND
... Whatever conditions you want to apply here.
Можете ли вы показать нам, что у вас есть пробовал? – DhruvJoshi
Пользователь «Заказать», а затем используйте TOP XXX, где XXX - количество идентификаторов. Вам нужно будет использовать запрос с двумя Selects для получения Count of ID. – jdweng
Похоже, вы могли бы использовать оператор select, где в предложении WHERE вы используете WHERE EXISTS (SELECT ... FROM ...) Немного сложно написать хороший пример, ничего не зная о ваших таблицах. – Tom