Ich habe Probleme mit einer TSQL-Abfrage und ich bin nicht mehr im Begriff zu googeln, also dachte ich natürlich, ich könnte genauso gut nach SO fragen.Wie wähle ich den häufigsten Wert für einen bestimmten Monat aus und zeige diesen Wert sowie die Häufigkeit an, mit der er auftritt?
Bitte denken Sie daran, dass ich erst vor ein paar Wochen damit begonnen habe, SQL zu lernen, und ich bin mir nicht sicher, welche Regeln es gibt und wie Sie Ihre Abfragen/Unterabfragen schreiben können und müssen.
Dies ist, was ich bisher:
Edit: Aktualisiert mit DDL, die ein Beispiel zu erstellen, auch nicht notwendig, „Client“ -Spalte kommentiert helfen sollen.
CREATE TABLE NumberTable
(
Number varchar(20),
Date date
);
INSERT INTO NumberTable (Number, Date)
VALUES
('55512345', '2015-01-01'),
('55512345', '2015-01-01'),
('55512345', '2015-01-01'),
('55545678', '2015-01-01'),
('55512345', '2015-02-01'),
('55523456', '2015-02-01'),
('55523456', '2015-02-01'),
('55534567', '2015-03-01'),
('55534567', '2015-03-01'),
('55534567', '2015-03-01'),
('55534567', '2015-03-01'),
('55545678', '2015-03-01'),
('55545678', '2015-04-01')
DECLARE
[email protected] AS int,
@FromDate AS date,
@ToDate AS date
--SET @ClientNr = 11111
SET @FromDate = '2015-01-01'
SET @ToDate = DATEADD(yy, 1, @FromDate)
SELECT
YEAR(Date) AS [Year],
MONTH(Date) AS [Month],
COUNT(Number) AS [Total Count]
FROM
NumberTable
WHERE
--Client = @ClientNr
Date BETWEEN @FromDate AND @ToDate
AND Number IS NOT NULL
AND Number NOT IN ('888', '144')
GROUP BY MONTH(Date), YEAR(Date)
ORDER BY [Year], [Month]
Damit bekomme ich das Jahr, den Monat und die Gesamtanzahl.
Ich bin glücklich, wenn ich nur die Top 1 der am meisten angerufenen Nummern bekomme und jeden Monat zähle, aber es ist vorzuziehen, die Top 5 zu zeigen.
Heres ein Beispiel dafür, wie ich die Tabelle am Ende aussehen würde (mit den Monaten formatierte Januar, Februar usw. anstelle von Zahlen ist nicht wirklich wichtig, aber würde ein nettes Bonus):
╔══════╦═══════╦═════════════╦═══════════╦══════════╦═══════════╦══════════╗
║ Year ║ Month ║ Total Count ║ #1 Called ║ #1 Count ║ #2 Called ║ #2 Count ║
╠══════╬═══════╬═════════════╬═══════════╬══════════╬═══════════╬══════════╣
║ 2016 ║ JAN ║ 80431 ║ 555-12345 ║ 45442 ║ 555-94564 ║ 17866 ║
╚══════╩═══════╩═════════════╩═══════════╩══════════╩═══════════╩══════════╝
wurde mir gesagt, dieses "leicht" mit einer Unterabfrage erfolgt war, aber ich bin nicht so sicher ...
Wenn SQL Frage zu stellen bitte geben DDL und DML Beispieldaten zu erstellen. Es wird anderen sehr helfen, Ihnen zu helfen. – Serg
@Serg Vielen Dank für den Kopf, ich werde versuchen, meine OP mit einigen nützlichen DDL zu aktualisieren. –
Siehe bearbeitete Antwort – Serg