Napisz zapytanie SQL SQL do pobrania z tabeli Zadania do góry Statusy zatwierdzenia, które pojawiają się po pierwszej wartości zerowej w kolumnie Status zatwierdzenia, a następnie w sekwencji Status zatwierdzenia, a następnie niektóre wartości puste
- Potrzebuję tylko najwyższej sekwencji statusu zatwierdzenia
- Numer seryjny dla każdego zadania Sekwencja ID zaczyna się od 1, a następnie pojawia się w sekwencji, takiej jak 1.2.3 ... i tak dalej
- Istnieją tysiące zadań w tabeli, takich jak T1 .... Tn
- Zobacz wynik zapytania poniżej i muszę napisać zapytanie, które zwraca dane w tym formacie
- Słyszałem funkcję analityczną, tj. „Klauzula podziału na partycje” może być użyta, ale nie wiem, jak z niej korzystać
Zadania
Wynik zapytania
Naprawdę doceniam pomoc ekspertów w tym zakresie Dzięki
Odpowiedzi:
0 dla odpowiedzi № 1Możesz to zrobić za pomocą funkcji analitycznych, ale istnieje sztuczka. Chodzi o to, aby patrzeć tylko na rzędy approval_status
nie jest null. Chcesz pierwszej grupy kolejnych numerów seryjnych w tej grupie.
Grupa jest identyfikowana przez różnicę między sekwencją wyliczającą wszystkie wiersze i istniejącym numerem seryjnym. Aby uzyskać pierwszy, użyj dense_rank()
. Na koniec wybierz pierwszy, szukając tych o randze równej 1:
select t.*
from (select t.*, dense_rank(diff) over (partition by taskid) as grpnum
from (select t.*,
(row_number() over (partition by taskid order by serial_number) -
serial_number
) as diff
from tasks
where approval_status is not null
) t
) t
where grpnum = 1;