如何计算几周

时间:2018-11-08 15:50:22

标签: sql sql-server date

我在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天,它们仍处于两个不同的星期(星期从星期一到星期日)。与特定密钥相关的条目数无关紧要,只有与该密钥相关的星期数适合。

2 个答案:

答案 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]