J'utilise SQL Server 2008. Je cherche à ramener seulement les 7 derniers jours de calendrier de chaque mois, comment pourrais-je faire cela.Sélectionnez les 7 derniers jours de chaque mois
Merci
J'utilise SQL Server 2008. Je cherche à ramener seulement les 7 derniers jours de calendrier de chaque mois, comment pourrais-je faire cela.Sélectionnez les 7 derniers jours de chaque mois
Merci
supposant champ appelé logtime, obtenir la gamme avec
....where logtime BETWEEN dateadd(month,month(logtime),dateadd(year, year(logtime) - 1900,0)) - 7
AND
dateadd(month,month(logtime),dateadd(year, year(logtime) - 1900,0)) - 1;
vous devez également vérifier que « logtime » (remplacé par votre nom de domaine) est dans la plage de dates que vous êtes aussi sélectionnant par exemple ... ET (ANNÉE (logtime)) = 2016 .. par exemple
Si vous avez 'logtime' d'un côté d'une comparaison et que vous l'utilisez de l'autre côté pour dériver les dates de comparaison, vous pouvez simplifier - par ex. Ici vous n'avez besoin de faire qu'une seule comparaison avec "le jour 7 jours avant la fin du mois dans lequel' logtime' tombe ". –
oui vous pourriez dire DAY (logtime)> = DAY (dateadd (mois, mois (logtime), dateadd (année, année (logtime) - 1900,0)) - 7) et également éviter des fractions de jours problèmes – Cato
- Merci beaucoup. – userleo87
Certains exemples spécifiques et la direction aideraient. Si vous voulez juste les lignes où, dites-columnA
contient une date qui tombe dans les 7 derniers jours de ce mois de respectif, alors vous pouvez dire simplement:
WHERE month(columnA) != month(dateadd(day,7,columnA))
à savoir il pose la question, "donné une date, A, la date 7 jours plus tard tomber dans un mois différent?"
Notez que ni cette requête ni ceux inclus dans les autres réponses ne peuvent utiliser des index sur cette colonne (puisque nous l'utilisons comme une entrée pour un calcul), ce qui est dommage.
Excuses pour mon manque de description, vous avez cependant craqué exactement ce dont j'avais besoin. – userleo87
Essayez cette
SELECT
*
FROM
Payments P
WHERE
P.PaymentDay < (SELECT DATEADD(month, ((YEAR(P.PaymentDay) - 1900) * 12) + MONTH(P.PaymentDay), -1)) AND -- Last day of current year-month
P.PaymentDay > (SELECT DATEADD(month, ((YEAR(P.PaymentDay) - 1900) * 12) + MONTH(P.PaymentDay), -7)) -- Last 7. day of current year-month
Essayez ceci:
--DAY(DATE) as day_of_month from day_master table.
select
a.day_id,a.day_of_month
from day_master a LEFT JOIN (select max(day_of_month) as 'max_day_of_month',day_id,month_no,year_no from day_master group by month_no,year_no)b ON b.month_no=a.month_no and a.year_no=b.year_no
where (b.max_day_of_month-a.day_of_month)<7 and a.month_no=11 and a.year_no=2017
GROUP BY a.month_no,a.year_no,a.day_id;
Quelle langue utilisez-vous? –
SQL Server 2008 - Je veux juste apporter tous les paiements reçus des 7 derniers jours de chaque mois depuis Janvier 16 – userleo87
Si vous pouvez spécifier * ce que l'entrée est * (Est-ce par exemple juste la date actuelle, ou une date fournie) et Ce que vous attendez en tant que * sortie *, cela aiderait probablement beaucoup - si l'entrée est juste une date unique (ou la date actuelle), quelques exemples qui utilisent des entrées différentes aideraient beaucoup aussi. –