2010-08-05 4 views
0

J'ai la requête suivante:TSQL sélectionne la dernière valeur par semaine?

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 

Ceci permet de sélectionner la dernière valeur entrée chaque jour pour un utilisateur donné (la colonne DATE_ADDED ne contient pas de valeurs de temps, et les ID de ligne sont autonumérotées). La requête fonctionne, mais ce que je voudrais faire est de sélectionner la dernière valeur entrée pour un semaine de calendrier donnée plutôt qu'un jour donné.

Par exemple, voici ce que la requête retourne en cours:

 
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 

Voici ce que je voudrais que ce retour:

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

Toutes les idées?

+0

Qu'est-ce qu'une semaine de calendrier pour vous? Le début de la semaine est régional - pour certains c'est le dimanche, d'autres c'est lundi ... –

+0

Désolé, j'aurais dû préciser - dimanche. – Ethan

Répondre

1

Je pense que si vous remplacez votre groupe originale clause avec

GROUP BY (DATEPART(WEEK,date_added)) 

vous devriez obtenir ce que vous voulez.

+0

Parfait, merci! – Ethan

0

Cela vous donnera le premier et le dernier jour de la semaine où un jour tombe

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 

simplement incorporer dans votre sous-requête

Questions connexes