0
votes

Remplacer la date de samedi et dimanche avec la date précédente du vendredi

J'ai une table de date générique.

J'essaie d'atteindre la sortie suivante p>

Entrez la description de l'image ici P>

Je ne peux pas Semblait obtenir la bonne sortie en utilisant cette affaire STEMENT P>

SELECT 
DayOfWeek,
ShortDate,

CASE WHEN (DayOfWeekNumber = '1' OR DayOfWeekNumber = '7') -- Saturday or Sunday
THEN (SELECT TOP 1 ShortDate FROM DateTable DD WHERE DayOfWeekNumber = 6) 
ELSE ShortDate  END AS ExpectedShortDate

FROM DateTable
WHERE ShortDate >= '3/13/2020' 


0 commentaires

3 Réponses :


2
votes

Vous pouvez simplement vérifier le jour de la semaine et appliquer un décalage en conséquence, dans une expression conditionnelle.

supposant que vous utilisez SQL Server (comme utilisation de Sélectionnez le top 1 dans votre requête suggère): xxx


0 commentaires

2
votes
SELECT 
DayOfWeek,
ShortDate,

CASE 
WHEN (DayOfWeekNumber = '1') -- Sunday
THEN (select FORMAT(DATEADD(DAY, -2, ShortDate), 'MM/dd/yyyy') AS date)
WHEN (DayOfWeekNumber = '7') -- Saturday
THEN (select FORMAT(DATEADD(DAY, -1, ShortDate), 'MM/dd/yyyy') AS date) 
ELSE ShortDate  END AS ExpectedShortDate

FROM DateTable

0 commentaires

2
votes

Tout en regardant une vidéo de formation de Brent Ozar, il a recommandé de créer une table de date (dbo.t_date) qui stockera N nombre d'attributs, y compris le jour de la semaine, le trimestre, le premier jour du mois, etc. Avoir une telle table Ces types d'activités sont un coup d'œil et enregistrez le prochain développeur de devoir lire un code méchant.

Cela peut ressembler à ceci:

Créer une table dbo.t_date (..., date datetetime2, jour_of_week varchar (100), ...)

De là, je suppose que vous pouvez prendre le reste du chemin. En outre, la table DBO.T_Date peut également servir de tableau de numéros, qui est utile lorsque vous souhaitez empêcher de boucler vos requêtes ...


0 commentaires