2012-11-09 133 views
4

我试图按周分组一系列日期。到目前为止,我有以下几点:星期一组的日期?

SELECT DATEPART(week, CONVERT(VARCHAR(50), e.event_date, 107)) AS 'Date' , 
     c.setting_secondary AS 'Workflow Cat' , 
     d.setting_main AS 'Error Type' , 
     SUM(e.event_count) AS 'Total' 
FROM marlin.support_events AS e 
     INNER JOIN marlin.support_config AS c 
      ON e.event_category = c.setting_code 
      AND config_code = 60 
     INNER JOIN marlin.support_config AS d 
      ON e.event_type = d.setting_code 
      AND d.config_code = 70 
WHERE e.event_date BETWEEN DATEADD(MONTH, -2, GETDATE()) AND GETDATE() 
     AND c.setting_secondary = 'Expenditure Voucher' 
     AND d.setting_main IN ('Unstarted' , 'Timeout') 
GROUP BY 
     DATEPART(week, CONVERT(VARCHAR(50), e.event_date, 107)) , 
     c.setting_secondary , 
     d.setting_main , 
     e.event_summary 

这说明我的周数,但日期是星期内开始,像这样:

enter image description here

我怎样才能显示,本周开始什么日期用?

答:

回答以下识别和替代方法我也发现这样做的:

DATEADD(dd, -(DATEPART(dw, e.event_date)-1), e.event_date) 

回答

4

您可以从最新获得的年份部分,附加第一个月的第一天然后添加(#week - 1)以获取event_date所属星期的开始日期,如下所示:

SELECT EventDate, WorkflowCat, ErrorType, SUM(EventCount) AS 'Total' 
FROM 
(
SELECT DATEADD(ww, 
      DATEPART(ww, e.event_date) - 1, 
      CONVERT(DATETIME, 
        CONVERT(VARCHAR(4), DATEPART(yy, e.event_date)) + '-01-01')) AS 'EventDate' , 
     c.setting_secondary AS 'WorkflowCat' , 
     d.setting_main AS 'ErrorType', 
     e.event_summary as 'EventSummary' 
     e.event_count AS 'EventCount' 
FROM marlin.support_events AS e 
     INNER JOIN marlin.support_config AS c 
      ON e.event_category = c.setting_code 
      AND config_code = 60 
     INNER JOIN marlin.support_config AS d 
      ON e.event_type = d.setting_code 
      AND d.config_code = 70 
WHERE e.event_date BETWEEN DATEADD(MONTH, -2, GETDATE()) AND GETDATE() 
     AND c.setting_secondary = 'Expenditure Voucher' 
     AND d.setting_main IN ('Unstarted' , 'Timeout') 
) 
GROUP BY EventDate, WorkflowCat, ErrorType, EventSummary 
相关问题