Mam zestaw danych, który obejmuje PRICE, SUBTYPE i inne. Chcę usunąć niektóre z nich, zanim użyję zestawu danych. Chcę usunąć wiersze dla rzeczy, których cena jest absurdalnie wysoka lub niska, w każdym SUBTYPE.Jak filtrować górny 1% i 1% mniej danych w każdej grupie w SQL
Dla każdego SUBTYPE patrzeć na zakres cen i usuwać lub odfiltrowywać wiersze. Zachowaj wiersze między: PRICErange * .01 | KEEP | PRICErange * .99
Zostało to dostarczone przez Martina Smitha na stackoverflow, zredagowałem to pytanie, więc zacznijmy od tego.
;WITH CTE
AS (SELECT *,
ROW_NUMBER() OVER (PARTITION BY SUBTYPE ORDER BY PRICE) AS RN,
COUNT(*) OVER(PARTITION BY SUBTYPE) AS Cnt
FROM all_resale)
SELECT *
FROM CTE
WHERE (CASE WHEN Cnt > 1 THEN 100.0 * (RN -1)/(Cnt -1) END) BETWEEN 1 AND 99
Nie jestem pewien, czy to jest to, co muszę zrobić. Nie wiem, ile rzędów zostanie usuniętych z końców.
Kiedy mówisz "Usuń", masz na myśli filtr lub usunąć? – KingCronus
ALBO "Top 1% posortowanej CENY" jest niejednoznaczne - czy chcesz zmniejszyć liczbę rekordów o 1%? –
Filtr. Chciałbym, aby pozostało w zbiorze danych, ale nie pojawi się w tym zapytaniu. Próbuję zrobić trochę więcej kontroli, ale także mogę wrócić i ponownie przeprowadzić proces z wartościami odstającymi. Z drugiej strony, jeśli dane wyjściowe zostały umieszczone w nowej tabeli, można je całkowicie usunąć w nowej tabeli. –