2017-01-30 2 views
0

Ich bin gebeten, einige Berichterstattung über Starter/Leavers basierend auf Informationen, die wir bereits sammeln.Abfrage Anzahl für jedes Jahr basierend auf einzelnen Datum

Ich versuche herauszufinden, ob dies von der MySQL selbst getan werden kann, oder wenn ich mehrere Anrufe tätigen muss.

Auf der einfachsten Ebene unsere Datenstruktur ist:

ID psName  dtStart  dtLeave 

(Diese aus mehreren Tabellen erzeugt wird, die in Office ziehen, Status, usw., die wir für kompliziertere Anfragen verwenden könnten)

Für ich kann ein bestimmtes Datum die folgende Abfrage verwenden, um die Zahl der Menschen in der Gesellschaft zu erhalten:

SELECT COUNT(*) FROM 
(
    SELECT ID, psName, dtStart, dtLeave 
    FROM people 
) st 
WHERE (dtStart <= "2016-06-04") 
AND (dtLeave >= "2016-06-04" OR dtLeave IS NULL) 

ich möchte in der Lage sein, in einem Zeitpunkt zu füttern, zum Beispiel „2016.04.06“ ein d eine Liste Liste der Zählungen erhalten (entweder als Spalten oder Zeilen) für dieses Datum historisch heißt

6/4/2016 200 
6/4/2015 175 
6/4/2014 150 
6/4/2014 125 
6/4/2013 100 

diese keinen Sinn macht, und wenn ja, ist es möglich?

+0

meinen Sie Gruppe von Jahr? – McNets

+0

Ja - Ich hätte gerne die Anzahl der Angestellten, sagen wir, "6. April" jedes Jahr –

Antwort

1

Beachten Sie, dass es kein Start- und Enddatum gibt, diese Abfrage wird alle Tabellendatensätze scannen.

SELECT YEAR(dtStart) as 'year', COUNT(*) FROM 
FROM people 
WHERE MONTH(dStart) = 4 AND DAY(dStart) = 6 
GROUP BY YEAR(dtStart); 

UPDATE

Menschen auf den gewählten Zeitraum beschäftigt Um:

In der Tat können Sie Ihre Anfrage reduzieren

SET @SelectedDate = '2016-04-06'; 

SELECT YEAR(dStart), COUNT(*), @SelectedDate FROM 
(
    SELECT ID, psName, dtStart, dtLeave 
    FROM people 
    WHERE DATE_FORMAT(dtStart, '%m%d') <= DATE_FORMAT(@SelectedDate, '%m%d') 
     AND DATE_FORMAT(dtleave, '%m%d') >= DATE_FORMAT(@SelectedDate, '%m%d') 
) st 
GROUP BY YEAR(dStart); 
+0

Das ist viel besser, dass ich es geschafft habe, aber nur die Anzahl der Leute zurückgibt, die am 6. April angefangen haben jedes Jahr. Nicht Jeder, der an oder vor diesem Datum begann, und links danach, was das Original gibt –

+0

Gut gesagt: '" 6. April "jedes Jahr', aber lass mich bearbeiten – McNets

+0

Entschuldigung - gemeint ist jeder, der vor diesem Datum begonnen hat jedes Jahr und ist nicht abgereist. "In Arbeit" statt "rekrutiert" –

Verwandte Themen