Два запроса, возвращающие разные числа - PullRequest
1 голос
/ 20 марта 2019

Почему эти запросы дают разные результаты

Запрос 1

SELECT DATEPART(YEAR, Cancel) [Year],
DATEPART(Month, Cancel) [Month], COUNT(1) [Count]
FROM Subscription
where DATEPART(YEAR, Cancel) = 2016
GROUP BY DATEPART(year, Cancel),DATEPART(Month, Cancel)

Этот запрос дает мне отмены за каждый месяц в 2016 году.

Запрос 2

Это дает мне отмены за 9-й месяц в 2016 году.

select count(*) from Subscription
where Cancel >= '2016-09-01 00:00:00.000'
and Cancel <= '2016-09-30 00:00:00.000'

Разница в этих числах составляет 50 КБ. Query 1 возвращает на 50 тысяч больше участников, чем Query 2

Ответы [ 2 ]

5 голосов
/ 20 марта 2019

Легко.По второму запросу вы пропускаете все отмены с последнего дня месяца 30 сентября 2016 года.

Вы должны использовать: and Cancel < '2016-10-01 00:00:00.000'

2 голосов
/ 20 марта 2019

Предположительно, вы хотите, чтобы второй запрос был:

select count(*) from Subscription
where Cancel >= '2016-09-01' and
      Cancel < '2016-10-01';

Это вернет все отмены в сентябре независимо от того, имеет ли Cancel компонент времени.

Если Cancel имеет компонент времени, ваша версия пропустит отмену в 2016-09-30.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...