我想创建一个可以每周选择数据的存储过程。如何做到这一点?这是我的情况,员工每天填写时间表,每周三早上付款。所以星期三是一周的第一天。我想在网格视图中显示数据。在我的网格视图中,网格视图中的每一页都应表示员工每周的工作。例如,如果有 7 条记录,今天是 2013 年 10 月 2 日星期三,并且过去 7 天内的每一天都有每条记录,则
-
最早的记录是在2013年9月25日进入的,
-
第二古老的记录是在2013年9月26日进入
的 第三古老的记录是在2013年9月27日进入
的......2013年10月1日创下第七大纪录
在我的网格视图中,我想在第 1 页上显示仅 9 月 25 日至 10 月 1 日的记录。这是一种按周对网格视图页面进行分组,星期三作为一周的第一天。我希望我能表达我的观点。
谢谢你的帮助。
从评论中复制
以下是我根据worked_date确定一周的开始和结束日期的方法:
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
也许不是最优雅的方式,但这对我来说可以得到最高的排名数字:
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
谢谢