TSQL выбрать последнее значение по неделям? - PullRequest
0 голосов
/ 05 августа 2010

У меня следующий запрос:

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 не содержит значений времени, а идентификаторы строк автоматически нумеруются).Запрос работает, но я хотел бы выбрать последнее введенное значение для данной календарной недели , а не для данного дня.

Например, вот что возвращает текущий запрос:

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 

Есть идеи?

Ответы [ 2 ]

1 голос
/ 05 августа 2010

Я думаю, что если вы замените свое первоначальное предложение GROUP BY на

GROUP BY (DATEPART(WEEK,date_added))

ты должен получить то, что хочешь.

0 голосов
/ 05 августа 2010

Это даст вам первый и последний день недели, в которую день входит в

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

просто включите это в свой подзапрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...