Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
@varname:=value
die formel. Zudem werden die Ausgabefelder in der angegeben Reihenfolge abgearbeitet. Sprich, du kannst in Spalte 3 auf die Spalten 1 und 2 zugreifen.select
t.my_value,
-- Variable ausgeben
@prev_value as prev_value,
-- und danach die Variable neu setzen
@prev_value := t.my_value as save_for_next_row
from my_table t
order by t.my_sort_field
select my_value, prev_value
from (
select
t.my_value,
@prev_value as prev_value,
@prev_value := t.my_value as save_for_next_row
from my_table t
order by t.my_sort_field
)
Doch, gibt es.Grundsätzlich gibt es in einer DB nicht "Die Zeile davor". Das ist je nach Sortierung und Filterung unterschiedlich. Die Daten siond auch nicht wie in einem Excel in einer festen Reihenfolge gespeichert.
SELECT
EinFeld,
COALESCE(RENummer,LAG(RENummer),'Nix gefunden') AS MeineRechnung
FROM
IrgendeineTabelle
ORDER BY
EinFeld,
RENummer
ID | Description |
---|---|
1 | Job1 |
2 | Job2 |
3 | Job3 |
4 | Job4 |
5 | |
6 | Job6 |
7 | Job7 |
8 | |
9 | Job9 |
SELECT
ID,
coalesce(Description, LAG(Description) OVER(ORDER BY ID),'Sorry') AS Description
FROM Jobs ORDER BY ID
1 | Job1 |
2 | Job2 |
3 | Job3 |
4 | Job4 |
5 | Job4 |
6 | Job6 |
7 | Job7 |
8 | Job7 |
9 | Job9 |
UPDATE Jobs As J1
SET J1.Description=S1.Vorher
FROM
(SELECT ID,coalesce(Description, LAG(Description) OVER(ORDER BY ID),'Sorry') As Vorher FROM Jobs ORDER BY ID) As S1
WHERE
J1.ID=S1.ID AND J1.Description IS NULL
Faustregel: Der Order By innerhalb der LAG-Funktion ist derselbe wie der ORDER BY des zugrundeliegenden Selects (kann ja eingebettet sein)Wieder was dazugelernt.
Aber dass es keine fixe Reihenfolge gibt, das stimmt. Darum muss man im LAG ja den ORDER BY mitgeben, damit die Methode den vorherigen Datensatz ermitteln kann.
Hier habe ich eine nette ANleitung für LAG in MySQL gefunden: MySQL LAG() Function Explained By Practical Examples
Nö, hab dein Beitrag überflogen und gesehen LAG+Test in SQLLIght. Dann ab zu google und den Befehl gesucht - SorryDir ist klar, dass dein Link derselbe wie meiner oben ist?![]()
select my_value, prev_value
from (
select
t.`Belegfeld 1`,
@prev_value as prev_value,
@prev_value := t.`Beleginfo 1` as save_for_next_row
from RECHNUNGEN
order by t.`Belegfeld 2`
BELEGFELD_1 | BELEGFELD_2 | BUCHUNGTEXT
RE1234 | B1 | TEST
RE1234 | B1 | TEST 2
| B1 | TEST 3
RE456 | B2 |
| B2 |
SELECT
IFNULL(
t.BELEGFELD_1,
LAG(t.BELEGFELD_1, 1)
over (
-- Gruppieren über BELEGFELD_2
PARTITION BY t.BELEGFELD_2
-- Absteigend sortiert BELEGFELD_1
ORDER BY t.BELEGFELD_1 DESC
)
) AS NEW_BELEGFELD_1,
t.*
FROM t_2124206 t
NEW_BELEGFELD_1 | BELEGFELD_1 | BELEGFELD_2 | BUCHUNGTEXT
RE1234 | RE1234 | B1 | TEST 2
RE1234 | RE1234 | B1 | TEST
RE1234 | | B1 | TEST 3
RE456 | RE456 | B2 |
RE456 | | B2 |