konto usunięte

Temat: Selekcja 100 rekordów po numerze kolumny

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?Ten post został edytowany przez Autora dnia 16.02.16 o godzinie 13:16

konto usunięte

Temat: Selekcja 100 rekordów po numerze kolumny

jeżeli A i B są NUMERIC, spróbuj po prostu
select b, max(a) from TABELA [WITH(INDEX(Index_Name))]
group by b
a dla poprawy czasu, jeżeli masz taką możliwość załóż sobie indeks na tabeli gdzie kluczem głównym będzie raz "a" a raz "b" i spróbuj wymusić frazą "WITH(INDEX(Index_Name))"
Bartosz O.

Bartosz O. Administrator
systemów

Temat: Selekcja 100 rekordów po numerze kolumny

Najpierw napisz jaka to baza - będzie łatwiej podać odpowiedź.
Np. w postgresie możesz zrobić tak:

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

konto usunięte

Temat: Selekcja 100 rekordów po numerze kolumny

Bartosz O.:
Najpierw napisz jaka to baza - będzie łatwiej podać odpowiedź.
Np. w postgresie możesz zrobić tak:

SELECT b, MAX(a)
FROM tabela
GROUP BY b
ORDER BY b DESC
LIMIT 100
:)
Zapomniałem, że chodziło o 100 największych (ale wg B czy A)
przepraszam...

Temat: Selekcja 100 rekordów po numerze kolumny

Rozumiem, że te 100 rekordów ma być dla każdej grupy w kolumnie B?
W poniższym zapytaniu jest IN, więc może wolno działać, toteż lepiej użyć tej samej tabeli i JOIN,
To zapytanie działa, ale potraktuj je bardziej jako szkic/podpowiedź i ewentualnie daj dać jak się u Ciebie wykonuje.

SELECT * FROM (
SELECT A, B, ROW_NUMBER() OVER (PARTITION BY B ORDER BY A DESC) nr
FROM testowa t1 WHERE t1.B in (SELECT t2.B FROM testowa t2 GROUP BY t2.B )
GROUP BY B, A
) tabTemp WHERE nr <= 4


Tabela testowa:

SELECT * INTO testowa
FROM (SELECT 1 AS A, 1 AS B
UNION
SELECT 22, 2
UNION
SELECT 15, 1
UNION
SELECT 11, 1
UNION
SELECT 31, 1
UNION
SELECT 41, 2
UNION
SELECT 421, 2
UNION
SELECT 18, 2
UNION
SELECT 67, 2) tab

konto usunięte

Temat: Selekcja 100 rekordów po numerze kolumny

Jest to baza z Accessu, wiec w MS SQL,

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

Po wpisaniu tego w Accessie pokazuje mi się błąd w ORDER BY. Podejrzewam że pewnie nie można używać LIMIT w tym programie a jakiejś innej funkcji do wyznaczenia tego.Ten post został edytowany przez Autora dnia 17.02.16 o godzinie 08:49
Bartosz O.

Bartosz O. Administrator
systemów

Temat: Selekcja 100 rekordów po numerze kolumny

Nie miałem styczności z Accesem, ale spróbuj w ten sposób:

WITH dane AS (SELECT b AS liczba, MAX(b) AS maks
FROM tabela
GROUP BY b
ORDER BY b DESC)

SELECT liczba, maks
FROM (SELECT liczba, maks, ROW_NUMBER() OVER() AS ograniczenie FROM dane) AS a
WHERE ograniczenie<101

konto usunięte

Temat: Selekcja 100 rekordów po numerze kolumny

nie mam dziś accessa pod ręką ale spróbuj "order by 2 desc" zamiast "ORDER BY [1].treeHt DESC"
"2" oznacz drugą kolumnę z select a porządkowanie po "ORDER BY [1].treeHt DESC" faktycznie wydaje się bez sensu....



Wyślij zaproszenie do