2016-07-25 20 views
-1

Ich benutze SQL Server 2008. Ich möchte nur die letzten 7 Kalendertage eines jeden Monats zurückbringen, wie würde ich dies tun.Wählen Sie die letzten 7 Tage eines jeden Monats aus

Dank

+0

Welche Sprache verwenden Sie? –

+0

SQL Server 2008 - Ich möchte nur alle Zahlungen aus den letzten 7 Tagen eines jeden Monats seit Januar 16 – userleo87

+0

bringen Wenn Sie * angeben können, was die Eingabe ist * (Ist es zB nur das aktuelle Datum oder ein angegebenes Datum) und was Sie als * output * erwarten, würde wahrscheinlich sehr hilfreich sein - wenn die Eingabe nur ein einzelnes Datum (oder das aktuelle Datum) ist, würden einige Beispiele, die unterschiedliche Eingaben verwenden, auch sehr hilfreich sein. –

Antwort

0

Feld namens LOGTIME vorausgesetzt, erhalten Sie den Bereich mit

....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; 

Sie müssen auch prüfen, ob ‚LOGTIME‘ (vom Feldnamen ersetzt) ​​im Bereich von Daten ist, dass Sie auch sind B. von ... AND (YEAR (logtime)) = 2016 .. zum Beispiel

+1

Wenn Sie "Logtime" auf einer Seite eines Vergleichs haben und es auf der anderen Seite verwenden, um die Vergleichsdaten abzuleiten, können Sie vereinfachen - z. Hier müssen Sie nur einen einzigen Vergleich mit "dem Tag 7 Tage vor dem Ende des Monats, in dem" Logtime "fällt" durchführen. –

+0

ja könnte man sagen DAY (logtime)> = DAY (dateadd (Monat, Monat (logtime), dateadd (Jahr, Jahr (Logtime) - 1900,0)) - 7) und vermeiden auch Bruchteile von Tagen Probleme – Cato

+0

Spot on - Vielen Dank. – userleo87

0

Einige spezifische Beispiele und Anweisungen würden helfen. Wenn Sie nur Zeilen wollen, wo, sagen columnA ein Datum enthält, die innerhalb der letzten 7 Tage von seinen jeweiligen Monat fällt, dann kann man einfach sagen:

WHERE month(columnA) != month(dateadd(day,7,columnA)) 

D.h. es stellt sich die Frage: "Ist ein Datum, A, fällt das Datum 7 Tage später in einen anderen Monat?"

Beachten Sie, dass weder diese Abfrage noch diese in anderen Antworten Indizes dieser Spalte verwenden können (da wir sie als Eingabe für eine Berechnung verwenden), was eine Schande ist.

+0

Entschuldigung für meinen Mangel an Beschreibung, Sie haben jedoch genau das geknackt was ich brauchte. – userleo87

0

dieses Try this

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 
0

Versuchen:

--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;