Heim > Fragen und Antworten > Hauptteil
So, ich habe den Eintrag in meiner Datenbank:
id | Datumszeit | Name | Level |
---|---|---|---|
0 | 22.03.2022 23:18:01 | John | 615 |
1 | 22.03.2022 23:17:01 | John | 616 |
2 | 22.03.2022 23:16:02 | John | 616 |
3 | 22.03.2022 23:15:01 | John | 616 |
4 | 22.03.2022 23:14:01 | John | 617 |
5 | 22.03.2022 23:13:01 | John | 617 |
6 | 22.03.2022 23:12:01 | John | 616 |
7 | 22.03.2022 23:11:01 | John | 617 |
8 | 22.03.2022 23:10:02 | John | 618 |
9 | 22.03.2022 23:09:01 | John | 618 |
Als Ergebnis möchte ich diese Werte erhalten, bei denen sich das nächste „lvl“ vom vorherigen „lvl“ unterscheidet. Ich meine, ich möchte den Ergebnisdatensatz mit der ID erhalten:
0 - weil es das erste ist,
1 - weil lvl nicht gleich 0 ist,
2,3 – übersprungen, da Level gleich 1 ist
4 – da sich Level von 1 unterscheidet,
5 – übersprungen, da Level mit 4 identisch ist,
6 – Weil sich das Level von 5 unterscheidet,
7 – Weil sich das Level von 6 unterscheidet,
8 – Weil sich das Level von 7 unterscheidet,
9 – Überspringen.
P粉1649427912024-04-05 16:08:06
这似乎非常适合 lag
分析函数(使用 MySQL 8+):
with keep as ( select *, if(id=Min(id) over() or level != lag(level) over(order by id), 1, 0) keepme from t ) select id from keep where keepme=1;