Zliczanie rekordów występujących kilka razy pod rząd

0

Dopiero uczę się SQL i mam pewien problem. Chciałbym żeby zliczyło mi wartości wpisane kilka razy pod rząd i wyświetliło je w nowej tabeli. Program ma pomijać wartości występujące tylko raz z rzędu Przykład:

nazwa
a
a
a
b
c
c
a
a
a
b
b
d

Powinno wyjść coś takiego:

nazwa | ilosc
a | 3
c | 2
a | 3
b | 2

0

no common a goolge ?

SELECT nazwa, count(nazwa) Ilosc
FROM Tabela
GROUP BY nazwa
1

@dzikq90: Na pewno chcesz zliczać wg. kolejności?
Wg. jakiego klucza występuje ta kolejność?

0

@BlackBad: Takie zapytanie zlicza mi wszystkie wartości a, b, c i d i pokazuje w tabeli:

nazwa | ilosc
a | 6
b | 3
c | 2
d | 1

A chcę, żeby zliczało tylko wartości wpisane pod rząd i pokazało wynik:

nazwa | ilosc
a | 3
c | 2
a | 3
b | 2

1

No ale jak pisze @oracledev - masz w tej tablicy jeszcze jakieś kolumny ? Co determinuje kolejność ? Bez tego ani rusz.

0

@BlackBad: Są 2 kolumny - nazwa użytkownika oraz data (czas, w którym użytkownik wypożyczył książkę). Użytkownik podczas wypożyczania książki jest wpisywany do bazy. Data/czas wypożyczenia determinuje kolejność

UŻYTKOWNIK || DATA/CZAS
a || YYYY-MM-DD, hhss
a || YYYY-MM-DD, hhss
a || YYYY-MM-DD, hhss
b || YYYY-MM-DD, hhss
c || YYYY-MM-DD, hhss
c || YYYY-MM-DD, hhss
a || YYYY-MM-DD, hhss
a || YYYY-MM-DD, hhss
a || YYYY-MM-DD, hhss
b || YYYY-MM-DD, hhss
b || YYYY-MM-DD, hhss
d || YYYY-MM-DD, hhss

2

@koszalek-opalek: dal Ci odpowiedź ... niestety ja spotkania miałem. Ale testowałem u siebie właśnie coś w ten deseń jak podane 2 linku (2 opcja):

;WITH cte AS (
 SELECT DataW, nazwa, grp = SUM(CASE WHEN nazwa = prev THEN 0 ELSE 1 END) OVER(ORDER BY DataW)
 FROM (SELECT *, prev = LAG(nazwa) OVER(ORDER BY DataW) FROM test) s
)
SELECT nazwa, cnt = COUNT(*)
FROM cte
GROUP BY grp,nazwa
ORDER BY grp;

Przykłąd: http://sqlfiddle.com/#!18/8ad2b8/1

0

Super. Wielkie dzieki za szybka pomoc :D

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