Funkcja opóźnienia SQL Server

Funkcja opóźnienia SQL Server

Funkcja opóźnienia na SQL Server to funkcja Windows wprowadzona w SQL Server 2012. Ta funkcja pozwala pobierać dane z poprzednich wierszy zgodnie z określoną wartością przesunięcia. Pomyśl o funkcji opóźnienia jako o możliwości dostępu do danych z poprzednich wierszy z bieżącego wiersza.

Na przykład z bieżącego wiersza możesz uzyskać dostęp do poprzedniego wiersza, który staje się bieżącym wierszem, i możesz uzyskać dostęp do poprzedniego wiersza i tak dalej.

W tym artykule dowiemy się, jak korzystać z funkcji opóźnienia na serwerze SQL, korzystając z różnych przykładów.

Funkcja SQL Server Lag ()

Wyrażamy składnię funkcji jako:

lag (wyrażenie, przesunięcie [, domyślnie])
NAD (
[partycja przez parition_by_Expression]
order_by_clause
)

Parametry funkcji i wartość zwracania

W powyższej składni mamy następujące parametry:

  1. Wyrażenie - kolumna lub wyrażenie używane przez funkcję opóźnienia do wykonywania obliczeń. Jest to wymagany parametr, a wyrażenie musi zwrócić jedną wartość.
  2. Zrównoważyć - dodatnia wartość liczb całkowita, która określa, ile wierszy wstecz funkcję opóźnienia odzyska. Jeśli nie zostanie określona, ​​wartość domyślna jest ustawiona na 1.
  3. Domyślny - Określa wartość domyślną zwróconą przez funkcję, jeśli określona wartość przesunięcia wykracza poza zakres partycji. Domyślnie funkcja zwraca null.
  4. Parition_by_Expression - wyrażenie używane do tworzenia logicznych partycji danych. SQL Server zastosuje funkcję opóźnienia do uzyskanych zestawów partycji.
  5. Order_by_clause - wyrażenie określające, w jaki sposób uporządkowane są wiersze w partycjach.

Funkcja zwraca typ danych wyrażenia skalarnego.

Przykłady opóźnienia serwera SQL

Spójrzmy na praktyczny przykład, aby lepiej zrozumieć, jak korzystać z funkcji opóźnienia. Zacznijmy od dodania przykładowych danych, jak pokazano:

Utwórz bazę danych sampledB;
IŚĆ
Użyj SampleDB;
Utwórz tabelę lag_func (
Id Int Not Null tożsamość (1,1) klucz podstawowy,
dbname varchar (50),
paradygmat varchar (50),
);
Wstaw do lag_func (dbname, paradygmat)
Wartości („mysql”, „relacyjne”),
(„MongoDB”, „Dokument”),
(„Memcached”, „Key-Value Store”),
(„ETCD”, „Kluczowy sklep”),
(„Apache Cassandra”, „szeroka kolumna”),
(„Couchdb”, „Dokument”),
(„Postgresql”, „Relaction”),
(„SQL Server”, „Relational”),
(„neo4j”, „wykres”),
(„ElasticSearch”, „Full-Text”);
Wybierz * z lag_func;

Powyższy zestaw zapytania powinien zwrócić dane jako:

Uruchom funkcję opóźnienia w kolumnie DBName, jak pokazano na przykładowym zapytaniu poniżej:

Wybierz *, lag (dbname, 1) ponad (zamówienie według dbname) jako poprzedni_db z lag_func;

Powyższe zapytanie zwraca dane wyjściowe jako:

Zauważ, że pierwszy wiersz zawiera wartość zerową, ponieważ nie ma poprzedniej wartości.

Przykład 2:

Zamiast uzyskać wartość zerową, w której wiersz nie zawiera poprzedniego wiersza, możemy ustawić wartość domyślną, jak pokazano na przykładowym zapytaniu poniżej:

Wybierz dbname, lag (dbname, 1, „n/a”)
Over (zamówienie według dbname) jako poprzedni_db
Z lag_func;

Powyższe zapytanie zwraca podobne dane wyjściowe jak powyżej. Jednak zamiast NULL otrzymujemy określony ciąg.

Przykład 3: niestandardowa wartość przesunięcia

Możemy również pobrać wartości w niestandardowej wartości przesunięcia. Na przykład, aby uzyskać wartość trzech poprzednich wierszy, możemy użyć zapytania:

Wybierz dbname, lag (dbname, 3, „n/a”)
Over (zamówienie według dbname) jako poprzedni_db
Z lag_func;

Powyższy przykładowy kod powinien zwrócić wynik jako:

Tutaj pierwsze 3 kolumny są zerowe, ponieważ wartości przesunięcia wykraczają poza zakres dostępnych wierszy.

Przykład 4: partycja przez

Możemy tworzyć logiczne partycje powiązanych danych za pomocą partycji według klauzuli. Następnie możemy zastosować funkcję opóźnienia do każdej partycji.

Rozważ poniższy przykład:

Wybierz dbname, paradygmat, lag (dbname, 1, „n/a ')
Over (Partion by Paradigm Order według dbname) jako poprzedni_db
Z lag_func;

Powyższe zapytanie zwraca przykładowy zestaw zapytania jako:

Zapytanie tworzy 6 partycji opartych na paradygmacie w powyższym wyniku. Na każdej partycji funkcja opóźnienia pobiera poprzedni rząd.

Wniosek

W tym artykule nauczył Cię, jak korzystać z funkcji opóźnienia SQL Server do pobrania poprzedniego wiersza z uzyskanego zestawu.

Dziękuję za przeczytanie!