【问题标题】:Find numbers of weeks in date range(from date-To date) in SQL SERVER在 SQL SERVER 中查找日期范围(从日期到日期)中的周数
【发布时间】:2013-09-17 05:50:25
【问题描述】:

我有两个约会 FromDateToDate。开始总是星期一ToDate 总是星期五

  • 我想单独计算周数,而不仅仅是计数。
  • 我想在给定的日期范围内显示第 1 周、第 2 周、第 3 周等报告。 (即每周产品计数)。

我已经试过了:

SELECT * FROM WeekDate
WHERE DATEDIFF(Week,GETDATE(),'2013-09-20')=0

它不仅提供第 0 周的所有值。 谁能帮我解决这个问题?

表结构

CREATE TABLE [dbo].[WeekDate]
(
    [id] [int] IDENTITY(1,1) NOT NULL,
    [Counter] [int] NULL,
    [CDate] [datetime] NOT NULL
) ON [PRIMARY] 

数据是

1   1   2013-09-17 00:00:00.000 
3   2   2013-09-18 00:00:00.000 
4   6   2013-09-19 00:00:00.000 
5   2   2013-09-23 00:00:00.000 
6   3   2013-09-24 00:00:00.000 
7   4   2013-10-01 00:00:00.000 

【问题讨论】:

  • 请提供有关表结构的更多信息和预期结果的示例。
  • 请包含您的数据和所需的输出
  • “它给出了所有的值”——当然是。再次查看您的 WHERE 子句,并注意您没有引用 any 列。 WHERE 子句是常量表达式,只能为真(返回所有行)或假(不返回行)
  • 创建表 [dbo].[WeekDate]( [id] [int] IDENTITY(1,1) NOT NULL, [Counter] [int] NULL, [CDate] [datetime] NOT NULL )在 [PRIMARY] 上,数据为 1 1 2013-09-17 00:00:00.000 3 2 2013-09-18 00:00:00.000 4 6 2013-09-19 00:00:00.000 5 2 2013-09-23 00:00:00.000 6 3 2013-09-24 00:00:00.000 7 4 2013-10-01 00:00:00.000 我想每周获得计数总和。我只是发送 Fromdate 和 Todate 作为参数。
  • 你总是得到 0,因为你使用 GETDATE() 和一个恰好在同一周的日期常量。 SELECT * FROM WeekDate WHERE DATEDIFF(Week,FromDate,ToDate)=0

标签: sql sql-server-2008


【解决方案1】:

很难说没有输出示例,但可能是这样的:

select
    sum(Counter),
    datediff(day, @FromDate, CDate) / 7 as ddiff
from WeekDate
-- if you need to filter out rows
where CDate >= @FromDate and CDate <= @ToDate
group by datediff(day, @FromDate, CDate) / 7

sql fiddle demo

【讨论】:

    【解决方案2】:

    我认为您希望按周计算产品总和,如果是这样,请按照您所说的那样尝试,我将开始日期设为 Monday,将结束日期设为 Frid​​ay

    declare @StartDate datetime,
            @EndDate datetime;
    
    select  @StartDate = '2013-09-16',
            @EndDate = '2013-10-04';
    
    ;with cte as
    (
      select @StartDate StartDate, 
        DATEADD(wk, DATEDIFF(wk, 0, @StartDate), 6) EndDate
      union all
      select dateadd(ww, 1, StartDate),
        dateadd(ww, 1, EndDate)
      from cte
      where dateadd(ww, 1, StartDate)<=  @EndDate
    )
    select (Select COUNT(Cdate) from WeekDate where Cdate between StartDate and EndDate) count1 , StartDate , EndDate
    from cte        
    

    【讨论】:

      猜你喜欢
      • 2015-10-05
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      相关资源
      最近更新 更多