2010-08-05 61 views
0

我有以下查询:TSQL按周选择最后一个值?

SELECT row_ID, 
     value, 
     date_added 
FROM dbo.Report 
WHERE salesman_ID = @salesman_ID 
     AND row_ID IN (SELECT MAX(row_ID) 
         FROM dbo.Report 
         WHERE salesman_ID = @salesman_ID 
         GROUP BY (date_added)) 
ORDER BY date_added ASC 

这将选择在每天进入给定用户的最后一个值(DATE_ADDED列不包含时间值,而行ID autonumbered)。该查询的工作原理,但我想要做的是选择一个给定的日历周而不是给定的一天输入的最后一个值。

例如,这里就是当前的查询返回:

 
row_ID | value | date_added 
1  | 25 | 7-5-2010 
2  | 50 | 7-7-2010 
5  | 40 | 7-15-2010 
9  | 55 | 7-16-2010 
11  | 60 | 7-27-2010 

这是我想它返回:

 
value | week_of 
50 | 7-4-2010 
55 | 7-11-2010 
60 | 7-22-2010 

任何想法?

+0

什么是您的日历周?每周开始是区域性的 - 有些是星期天,有些则是星期一... – 2010-08-05 16:23:39

+0

对不起,我应该指定 - 周日。 – Ethan 2010-08-05 16:37:32

回答

1

我想起了周,如果你有

替换原来的GROUP BY子句
GROUP BY (DATEPART(WEEK,date_added)) 

你应该得到你想要的。

+0

完美,谢谢! – Ethan 2010-08-05 18:08:45

0

这会给你的第一天和最后一天凡有一天落在

DECLARE @d DATETIME 
SET @d = '20100805' 

SELECT 

    @d - DATEDIFF(dd, @@DATEFIRST - 1, @d) % 7 AS FirstDayOfWeek, 
    @d - DATEDIFF(dd, @@DATEFIRST - 1, @d) % 7 + 6 AS LastDayOfWeek 

只是将此主题融入你的子查询