Ich habe eine Tabelle, in der einige Werte für Monate und Jahre gespeichert sind.Wählen Sie N Zeilen vor und N Zeilen nach dem Datensatz
Beispiel:
Month | Year | Value
1 | 2013 | 1.86
2 | 2013 | 2.25
3 | 2013 | 2.31
...
3 | 2016 | 1.55
4 | 2016 | 1.78
Monat und Jahr Kombination ist ein komplexer Primärschlüssel. Es ist garantiert, dass alle Werte für alle vergangenen Jahre in der Tabelle vorhanden sind.
Benutzer kann bestimmten Monat und bestimmtes Jahr auswählen. Nehmen wir an, der Benutzer hat 2014 als Jahr und 6 als Monat ausgewählt. Ich muss 15 Zeilen vor und 15 Zeilen nach der ausgewählten Kombination anzeigen.
Wenn aber nicht genügend Zeilen (weniger als 15) nach der ausgewählten Kombination vorhanden sind, muss ich vorher mehr Zeilen abrufen.
Grundsätzlich brauche ich nur 31 Zeilen (immer 31, es sei denn, es gibt nicht genug Zeilen in der gesamten Tabelle) der Daten, wo die ausgewählte Kombination so nahe wie möglich an der Mitte sein wird.
Was ist der richtige Weg, das zu tun?
Derzeit bin ich mit diesem fest:
;WITH R(N) AS
(
SELECT 0
UNION ALL
SELECT N+1
FROM R
WHERE N < 29
)
SELECT * FROM MyTable e
LEFT OUTER JOIN (
SELECT N, MONTH(DATEADD(MONTH,-N,iif(@year != Year(GETDATE()), DATEFROMPARTS(@year, 12, 31) ,GETDATE()))) AS [Month],
YEAR(DATEADD(MONTH,-N,iif(@year!= Year(GETDATE()), DATEFROMPARTS(@year, 12, 31) ,GETDATE()))) AS [Year]
FROM R) s
ON s.[Year] = e.[Year] AND s.[Month] = e.[Month]
WHERE s.[N] is not null
Das ist nicht wirklich das, was ich tun möchte, da es im nächsten Jahr Monate abschneidet nur
, welche SQL-Server-Version zu funktionieren? – Mihai
sql server 2012 – Coffka
möchten Sie vielleicht dies überprüfen http://StackOverflow.com/Questions/2135418/equivalent-of-limit-and-offset-for-sql-server –