SQL Server - 按datepart周排序

Bra*_*rad 1 sql sql-server

我正在使用SQL Server.当我尝试使用datepart函数按周对信息进行排序时,它不返回任何值.我的表中有所选日期范围的值.

我试图使用的查询是:

Declare @StartDate datetime, @EndDate datetime
set @StartDate = '20120401 00:00:00'
set @EndDate = '20120430 23:59:59'
;WITH
mytablePlusHours As
(
SELECT *,
    DATEPART(ww, [eci_date])     AS [dateWeek]
FROM    [mytable]    
)
, mytableHourGroups As
(
SELECT  dateWeek, 
        [eci_country],
        COUNT(*)        As [Number_Country],
        ROW_NUMBER() OVER(PARTITION BY dateWeek ORDER BY [eci_country])
                        As [Country_Rank]
FROM        mytablePlusHours
GROUP BY    dateWeek, [eci_country]
)
SELECT  
    dateWeek     AS [eci_date],
    [eci_country],
    [Number_Country]
FROM    mytableHourGroups WITH(NOLOCK)
WHERE   [dateWeek] between @StartDate and @EndDate
ORDER BY [dateWeek], [Number_Country] DESC
Run Code Online (Sandbox Code Playgroud)

我可以在白天提取信息,但我无法弄清楚如何按周分类.有人可以告诉我我的代码在哪里错了吗?谢谢!

我试图显示我的数据,如:

Week Country       Count
16   United States  13
17   Canada         41
Run Code Online (Sandbox Code Playgroud)

Mat*_*lie 5

[DateWeek] 不是日期,而是一个数字(1到53).

要么...

WHERE子句移动到您的第一个CTE.

mytablePlusHours As
(
  SELECT *, DATEPART(ww, [eci_date])     AS [dateWeek]
    FROM [mytable]
   WHERE [eci_date] between @StartDate and @EndDate
)
Run Code Online (Sandbox Code Playgroud)

或者,将其更改为DATEPART()返回日期的函数...

mytablePlusHours As
(
  SELECT *, DATEADD(WEEK, DATEDIFF(WEEK, 0, [eci_date]), 0) AS [dateWeek]
    FROM [mytable]
)
Run Code Online (Sandbox Code Playgroud)