我想创建一个存储过程,我可以逐周选择数据。如何才能做到这一点?这是我的情况,员工每天填写时间表,每周三早上每周付款。所以星期三是本周的第一天。我想在gridview中显示数据。在我的gridview中,gridview中的每个页面应代表员工每周工作。例如,如果有7条记录,今天是2013年10月2日星期三,以及过去7天内每天的每条记录,那么
最早的记录是在2013年9月25日输入的,
第二个最早的记录于2013年9月26日输入
2013年9月27日输入了第三个最早的记录......
2013年10月1日输入了第7个最早的记录
在我的gridview中,我想在第1页上显示,记录仅限于9月25日至10月1日。这种方式将gridview页面按星期分组,星期三作为一周的第一天。我希望我能理解我的观点。
感谢您的帮助。
从评论中复制
以下是我如何根据working_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
答案 0 :(得分: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
由于