Selekcja 100 rekordów po numerze kolumny

0

Dzień dobry, mam następujący problem.

Musze wyznaczyć 100 największych rekordów po numerze w kolumnie.
Struktura wygląda tak:

A B
1 1
22 2
31 1
41 2

Muszę wyznaczyć dla każdego nr B największe liczb z kolumny A. Czyli w tym przypadku B1 = 31, 1; B2 = 41, 22
Zadanie wydaje się być proste, ale mam ponad 10 mln liczb w kolumnie A oraz ponad 40 tys nr w kolumnie B.
Czy ktoś mógłby mi pomóc? Dodam, że dość słabo orientuje się w SQL-u wiec prosiłbym raczej o rozwiązanie dla ułomnych :D

0
select max(a) as A, B from costam group by B
0

Ale czy w jest zawarte żeby wyznaczył 100 największych rekordów po nr wiersza B?

0

Tak, jest :)

0

Nie działa :P Powinno to raczej wyglądać tak:

SELECT b, MAX(a)
FROM tabela
GROUP BY b
ORDER BY b DESC
LIMIT 100

0

Wrzuciłam Twoje zapytanie w Accessie, w sql :

SELECT [1].ID_WYDZ, MAX([1].treeHt)
FROM 1
GROUP BY [1].ID_WYDZ
ORDER BY [1].treeHt DESC
LIMIT 100;

Czyli mam tabele 1, nazwy kolumny to ID_WYDZ oraz treeHt, ale wyskakuje mi błąd w ORDER BY. Czy ktoś wie dlaczego?

0

SELECT [1].ID_WYDZ, MAX([1].treeHt) as dupa
FROM 1
GROUP BY [1].ID_WYDZ
ORDER BY dupa DESC
LIMIT 100;

0

Skoro w accessie wiec pewnie w MS SQL :P wiec nie limit a TOP

0

Dobra to może podsumuje bo widzę że się nie zrozumieliśmy.

Potrzebuje wyciągnąć 100 największych wyników w kolumnie A dla każdego nr występującego w kolumnie B. Numery w kolumnie B się naturalnie powtarzają.

0

Dla sqllite, zamien limit na odpowiednie slowo i sprawdz czy rowid tak samo sie nazywa w twojej bazie (jak nie to uzyj zamaist rowid klucza). Limit moze nie byc obsługiwany w podzapytania WHERE IN, zależy od serwera bazy.

SELECT b, a 
    FROM costam c1
    WHERE c1."ROWID" IN (
        SELECT c2."ROWID"
            FROM costam c2 
            WHERE c2.b = c1.b
            ORDER BY a DESC
            LIMIT 100)
    ORDER BY b ASC; 
0

Nawiązując do tego co napisał @nalik w MSSQL będzie to wyglądać mniej więcej tak:

 select distinct br.b, s.a
   from tabela br
  cross apply (select top 2 b.a from tabela b where b.b = br.b order by b.a desc) s

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