Как рассчитать сколько недель - PullRequest
0 голосов
/ 08 ноября 2018

Я нахожусь на SQL Server, и у меня есть таблица, содержащая такие значения:

Date        |  Key
2017-06-01  |  X
2017-06-15  |  Y
2017-06-01  |  X
2017-06-05  |  X
2017-05-23  |  Z
2017-06-05  |  Z
2017-04-10  |  Z
2017-04-10  |  Y

и в запросе мне нужно указать количество недель, содержащихся в каждом ключе с начальной датой: 2017-03-27

Итак, учитывая наш предыдущий пример, ожидаемый результат будет:

X  |  2
Y  |  2
Z  |  3

Это потому, что хотя 01/06 и 05/06 (две даты, содержащиеся в X) разнесены всего на 5 дней, они находятся на двух разных неделях (с понедельника по воскресенье), если считать от 27/03. Количество записей, относящихся к определенному ключу, не имеет значения, вписывается только число недель, связанных с этим ключом.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Я думаю, что это должно работать:

SELECT [Key], COUNT(DISTINCT DATEPART(WEEK,[Date])) Cnt
FROM yourTable
GROUP BY [Key]

Если ваши данные охватывают несколько лет, вы можете попробовать это:

with cte as(
SELECT DISTINCT [Key], DATEPART(WEEK,[Date]) Wk, DATEPART(YEAR,[Date]) Yr
FROM yourTable
)
SELECT [Key], COUNT(*) Cnt
FROM cte
GROUP BY [Key]
0 голосов
/ 08 ноября 2018

Вы можете считать дни после 2017-03-27 и делить на 7:

select t.*, ( datediff(day, '2017-03-27', date) / 7 ) as num_weeks
from t;

Тогда вы можете использовать count(distinct):

select key, count(distinct datediff(day, '2017-03-27', date) / 7 ) as num_weeks
from t
group by key;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...