zliczanie wierszy pod rząd

0

Cześć mam taki problem. W bazie mam tylko imiona i daty. Chce aby zapytanie zliczało wystąpienia imion pod rząd ale nie wszystkie tylko wystąpienia tego samego wiersza z przerwami na takie co się nie powtarzają lub powtarzają ale są inne.Do tego chce posegregować wystąpienia min i maks daty dla kazdej serii wystapienia. Czyli przykładowo Marcin 3razy min data maks data, Adam 2razy min data maks data, Marcin 3 min data maks data.
Udało mi się napisać jedynie taki kod zliczający wszystkie takie same imiona bez uszeregowania rzędów i dla każdego wystąpienia min i maks date. Czyli Adam 2 razy min data maks data, Marcin 6razy min data maks data.

SELECT name, COUNT(name) as ilość, Min(createdDate) as minimalna_data, Max(createdDate) as maksymalna_data FROM testtable where name is not null group by name ;

0

EDIT: Pomimo pierwszych testów które przyniosły zamierzony skutek - w pewnych okolicznościach występują błędy także usuwam moje podejście póki co.

0

Pytanie zasadnicze, co definiuje kolejność wiersza w tabeli?

0

@Paweł Oko: Odpowiadaj w postach.

chyba nie zrozumiałeś, zapytam inaczej jak zrobić order by aby była kolejność wierszy która cię interesuje?

0

Uczę się dopiero sqla jestem początkującym nie bij nie kumam pytania wiec pokaże o co mi chodzi może lepiej.Tabele po lewej mam w bazie danych( z nullami pomiędzy co prawda) a tabelkę po prawej chce dostać w wyniku zapytania.

2

Z założenia tabele (relacje) nie mają kolejności. Jeżeli chcemy mieć jakąś kolejność to musimy posortować dane (order by). Dlatego pytam co tę kolejność determinuje, jeżeli twierdzisz, że imię to sort po tej kolumnie powinien zwróćić oczekiwaną kolejność a tak się nie stanie...

Bez wyróżnika kolejność nie masz nigdy pewności, że dostaniesz rekordy w oczekiwanej kolejności, przez co rozwiazanie jakie by nie było może powodowac nieprawidlowe wyjście.

0

Trochę brzydko się podepnę pod temat - ale może to wtedy też naprowadzi OP. Sytuacja jak w przykładzie niżej:
Mamy kod ID i daty ValidFrom i ValidTo - i skończoną ilość dalszych kolumn oznaczających wartości w danym przedziale. Jak oflagować - np policzyć ilość występujących po sobie (w szeregu) takich samych rekordów (dubli) zakładając, że sortujemy Po ItemID i ValidFrom. (Dubel jest gdy wszystkie kolumny są takie same oprócz dat) .

Wydawało się, że rozwiązałem to wczoraj a dziś znów zonk. Mam co prawda obejście tego konkretnego problemu ale i tak chciałbym zobaczyć jak byś to rozwiązał @Panczo

Text:
12345666987 9-4-2021 NULL test1 XXX 11
12345666987 8-4-2021 9-4-2021 test1 XXX 11
12345666987 7-4-2021 8-4-2021 test1 XXX 11
12345666987 6-4-2021 7-4-2021 test1 XXX 11
12345666987 5-4-2021 6-4-2021 test1 XXX 11
12345666987 4-4-2021 5-4-2021 test1 XXX 11
12345666987 3-4-2021 4-4-2021 test1 XXX 11
12345666987 2-4-2021 3-4-2021 test2 ZZZ 90
12345666987 1-4-2021 2-4-2021 test2 ZZZ 90
12345666987 31-3-2021 1-4-2021 test2 ZZZ 90
12345666987 30-3-2021 31-3-2021 test3 WW 17
12345666987 27-3-2021 30-3-2021 test4 WW 17
12345666987 26-3-2021 27-3-2021 test5 WW 17
12345666987 25-3-2021 26-3-2021 test6 CCZ 17
12345666987 23-3-2021 25-3-2021 test6 KK 17
12345666987 20-3-2021 23-3-2021 test6 KK 25
8888899999 9-4-2021 NULL opis XXX 66
8888899999 8-4-2021 9-4-2021 opis XXX 66
8888899999 7-4-2021 8-4-2021 opis KKK 66
8888899999 6-4-2021 7-4-2021 opis XXX 66
8888899999 1-4-2021 6-4-2021 opis LL 66
8888899999 1-1-2021 1-4-2021 opis LL 66

screenshot-20210413140937.png

0

https://pl.seequality.net/funkcje_lag_lead_w_tsql/
https://www.sqlpedia.pl/funkcja-rank-dense-rank/

twórca mojego zadania polecił mi po tym jak powiedziałem, że nie wiem do konca czym sie kierować w tworzeniu tego zapytania abym skorzystał z funkcji lag lead albo dense rank

0

@BlackBad: dobrze pisze, musi być order by

Ale usciślimy, wątek oznaczyłeś, że dotyczy mysql linki podajesz do tsql, czego uzywasz?

0

Zadanie jakie dostałem bylo nie określone w jaki sposób ma być zrobione wiec sam kombinowałem a, że z mysqla bardziej ogarniałem jak na świerzaka to w nim próbowalem. Dopiero teraz po tej wskazówcę widze, że chyba bedzie musial to byc tsql.

0

Masz wpływ na dane? Czy dostałeś?

0

Dostałem, danych jest malutko bo to tak jak mówiłem tylko seria imion + nulle oraz losowe daty wiec nic istotnego. Poprosiłem jeszcze o rade na temat, jak ogarnąć sortowanie tych wysp danych ale już nie dostałem odpowiedzi :(

0

A czy stoi cos na przeszkodzie, aby wstawić je do tabeli w którym kluczem głównym będzie kolumna identity, co pozwoli zachować kolejność?

0

Lepsze takie rozwiązanie jak żadne skoro nie chcą mi podać nawet odpowiedzi jak to zapytanie prawidłowo zrobić to mogę zrobić po swojemu. Czyli chcesz dostawić dodatkową kolumne z id i po niej segregować tak?

0

Musisz zrozumieć, że tego zapytania bez wymuszenia oczekiwanej kolejności nie da się zrobić. Z samej teori kolejność zwracanych rekordów bez 'order by' nie jest gwarantowana, a ogólniej nie ma znaczenia.
Bo inaczej Twoje pytania byłoby analogiczne np. z takim: Za linią mety stoją Jacek, Tomek, Ola, Maciek. Kto pierwszy ukończył bieg?

0

Rozumiem już w czym jest problem.

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