我在SQL Server上,并且有一个包含如下值的表:
ListFormat
查询所需要返回的是每个键包含的周数,起始日期为: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
这是因为,从27/03算起,即使01/06和05/06(X包含的两个日期)相隔仅5天,它们仍处于两个不同的星期(星期从星期一到星期日)。与特定密钥相关的条目数无关紧要,只有与该密钥相关的星期数适合。
答案 0 :(得分:2)
您可以算出2017年3月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;
答案 1 :(得分:1)
我认为这应该可行:
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]