Wyszukiwanie zmiany wartość

0

Witam,
Mam olbrzymią tabele w której zapisuje Wzór i Serial części. Potrzebuje pomocy w stworzeniu zapytania w SQL które by zwracało pierwszy rekord z wartością pola "Serial", w momencie gdy nastąpiła zmiana wartości pola Wzór. (wartość obecnego pola Wzór jest inna niż wartość pola z poprzedniego rekordu). Jeśli nie ma takie zmiany nic nie zwraca

Wzór	Serial
23	A1     - zwróci to
23	A2
23	A3
23	A4
23	A5
23	A6
24	A7-  zwróci to
24	A8
24	A9
24	A10
24	A11
24	A12
24	A13
25	A14 - zwróci to
25	A15
25	A16
25	A17
25	A18
25	A19
26	A20 - zwróci to
26	A21
2

@Błażej Górecki:

  1. Na początek: nie mysli o tabel SQL jako czymś, co ma swoją kolejność - choć przypadkowo może tak ją w jakimś kontekście widzisz.
    To już nam stawia zagadnienie zadeklarowania (wymuszenia) sortowania, grupowania itd ... a jak grupowanie to min/max się klania.

  2. Ja bym chwytał to na kliencie, co na pewno nie jest propozycją ortodoksyjną, ale chamsko skuteczną

0

tak tylko mogę mieć taka sytuacje że wzór 23 wystąpi na nowo ale z serial np A1234

2
select
*
from
(select
 row_number() over (partition by wzor order by serial) r
 ,wzor
 ,serial
 from
 tabela) t
where r = 1
0

testuje, na ograniczonej ilości danych i nie pokazuje wszystkich zmian wzoru.

1

@Błażej Górecki: not to podaj próbkę danych na których się nie sprawdza, dodatkowo odpowiedz na pytanie:

Co to znaczy pierwszy rekord w ramach wzoru?

0

Dane w pliku.

Chce wykryć zmianę na ostatniej kolumnie, i wrócić ten drugi wiersz z podanych partdane.txt
za

2022-11-05 0450.043 242211050436 100 77226
2022-11-01 2202.093 242210310642 100 77225
..
2022-11-03 0603.360 242211030507 100 77225
2022-11-03 0627.900 242211030509 100 77226
...
2022-11-10 1338.257 242211100827 100 77221
2022-11-10 1354.650 242211100829 100 15486
...
2022-11-16 0959.463 242211160670 100 15486
2022-11-16 1026.127 242211160672 100 77226
....

0

Masz ten plik zaimportowany do SQL-a?
Rozumiem, że "kolejność" to numer linii w pliku?

0

Jeżeli numer lini determinuje kolejnośc, to musisz odpowiednio przygotować plik przed importem, w sensie dodać klumne z numerem wiersza, (notepadd++ zrobi to za ciebie):

screenshot-20230120151612.png

Po imporcie, wygląda tak:

screenshot-20230120152129.png

I zapytanie:

with w as (
select
	convert(datetime,right(data,len(data)-5),121) data
	,kol1
	,kol2
	,wzor
	,LAG(wzor,1,wzor) over (order by cast(left(data,5) as int)) prev
from 
	dane)


select 
	* 
from 
	w 
where 
	wzor <> prev

Da w wyniku:

screenshot-20230120152223.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1