2016-11-25 6 views
0

Ich habe beschlossen, neues Thema zu veröffentlichen, wie ich den Bericht, die eine Liste der Kunden Sendungen, Gesamtumsatz und jetzt die Anforderungen leicht geändert benötigen (wieder), und ich muss trainieren, wie viele Monate Client beschäftigen sich mit uns auf der Grundlage der ersten Rechnung ausgestellt/gefunden in unserer Datenbank im Jahr 2015 und 2016. zum BeispielTSQL Brauchen Hilfe - berechnen Sie die Anzahl der Monate zwischen Daten basierend auf dem Datum in der Datenbank gefunden

----------------------------------------------------------------- 
|Client code | invoice date   | Number of months  | 
----------------------------------------------------------------- 
|CliID 007 |     20161001|      1| 
|CliID 012 |     20160824|      3| 
----------------------------------------------------------------- 

Meine aktuelle Skript abrufen der Kunden und das Rechnungsdatum aber jetzt (ich bin verwirrt) muss herausfinden, wie man eine Anzahl von Monaten zwischen dem Datum berechnen kann, als die erste Rechnung in 15 und 16 ausgegeben wurde.

Unten ist das Skript, mit dem ich am Ende bin.

select 
    cli.code, 
    (Select min(invoice.dfac) 
    from invoice 
    inner join client on client.clientid = invoice.clientid 
    where client.bur = 'nlams' 
     and invoice.dfac >= '20160101' 
     and invoice.dfac <= '20161231' 
     and cli.code = client.code) 
from 
    client as cli 
where 
    cli.bur = 'nlams' 
group by 
    cli.Code 

Jede Hilfe würde sehr geschätzt werden!

+0

Haben Sie erstes Rechnungsdatum mit dem aktuellen Datum zu prüfen und gegeben will Anzahl der Monate ..? – Mansoor

+0

Ja, das ist richtig .. Vielen Dank für Ihre Eingabe – piotr

+0

Wie definieren Sie einen Monat? Beispielsweise. Würden Sie den Unterschied zwischen "2016/01/01" und "2016/02/28" als den Unterschied zwischen "2016/01/31" und "2016/02/01" ansehen? – iamdave

Antwort

0

Um die Anzahl an Monaten Differenz Verwendung DATEDIFF zu bekommen, so dass Ihr SELECT Teil wird:

Select DATEDIFF(m, MIN(invoice.dfac), GETDATE())

+1

Hier ist eine wichtige Unterscheidung zu treffen, da hier nicht die Anzahl der Monate, sondern die Anzahl der überschrittenen Monate * Grenzen * berechnet wird. Die "Datierung" zwischen "2016/01/01" und "2016/02/28" entspricht der Differenz zwischen "2016/01/31" und "2016/02/01". – iamdave

+0

Selbstverständlich. Ich hatte gehofft, mit dem OP bei DATEDIFF die Ausgabe auf ihre Bedürfnisse abstimmen zu können. –

2

diese

Versuchen
SELECT  cli.code, MIN(invoice.dfac) firstMonth, 
      DATEDIFF(month, MIN(invoice.dfac), GETDATE()) MonthsPassed 
FROM  client AS cli 
LEFT JOIN invoice ON client.clientid = invoice.clientid 
WHERE  client.bur = 'nlams' 
GROUP BY cli.Code 
+0

Danke Daryl, sieht gut aus. Ist eine einfache Lösung, um die Anzahl der vollen Monate zwischen den Daten zu erhalten? – piotr

+0

das ist so einfach wie es Piotr bekommt –

Verwandte Themen