1

我想创建一个可以每周选择数据的存储过程。如何才能做到这一点?这是我的情况,员工每天填写时间表,每周三早上付款。所以星期三是一周的第一天。我想在网格视图中显示数据。在我的 gridview 中,gridview 中的每个页面都应该代表员工每周工作的时间。例如,如果有 7 条记录,今天是 2013 年 10 月 2 日,星期三,过去 7 天内每天的每条记录,那么

  1. 最古老的记录是在 2013 年 9 月 25 日进入的,

  2. 第二古老的记录于 2013 年 9 月 26 日进入

  3. 第三个最古老的记录是在 2013 年 9 月 27 日进入的……

  4. 第 7 个最古老的记录于 2013 年 10 月 1 日进入

在我的网格视图中,我想在第 1 页显示仅从 9 月 25 日到 10 月 1 日的记录。这是一种按周对 gridview 页面进行分组的方式,周三是一周的第一天。我希望我能明白我的意思。

谢谢您的帮助。

复制自评论

以下是我如何根据工作日期确定一周的开始和结束日期:

SELECT *
, dateadd(week, datediff(day,'20000105',worked_date) / 7, '20000105') AS WeekStart
, dateadd(week, datediff(day,'20000105',worked_date) / 7, '20000105')+6 AS WeekEnd 
FROM Timesheet 
4

1 回答 1

1

也许不是最优雅的方式,但这对我来说可以获得最高排名:

 WITH CTE AS (

            SELECT employee_id, DENSE_RANK() OVER (ORDER BY DATEDIFF(DAY, ''20130925'', worked_date )/7 DESC) AS weekRank
            FROM Timesheet
            )

            SELECT TOP (1) weekRank  
            FROM CTE
            WHERE employee_id=@employee_id  
            ORDER BY weekRank DESC

这就是我可以创建 weekRank 列并动态传递参数的方法:

WITH rank_cte AS (
SELECT timesheet_id,employee_id, date_worked, 
    dateadd(week, datediff(day,'20000105',date_worked) / 7, '20000105')   AS WeekStart, 
    dateadd(week, datediff(day,'20000105',date_worked) / 7, '20000105')+6 AS WeekEnd,
    DENSE_RANK() OVER (ORDER BY 1 + DATEDIFF(DAY, '20130925', worked_date )/7 DESC) AS  weekRank
FROM Timesheet

)

 SELECT timesheet_id, worked_date, WeekStart, WeekEnd, weekRank 
 FROM rank_cte rc 
 WHERE  employee_id=@employee_id 
 AND weekRank=@weekRank
 ORDER BY worked_date  DESC

谢谢

于 2013-10-07T20:01:42.463 回答