Tôi có tập dữ liệu bao gồm PRICE, SUBTYPE và các tập dữ liệu khác. Tôi muốn làm một số loại bỏ ngoại lệ trước khi tôi sử dụng tập dữ liệu. Tôi muốn xóa các hàng cho những thứ có giá cực kỳ cao hoặc thấp, trong mỗi SUBTYPE.Làm cách nào để lọc 1% trên cùng và 1% dữ liệu thấp hơn trong mỗi nhóm trong SQL
Đối với mỗi SUBTYPE, hãy xem phạm vi của PRICE và xóa hoặc lọc ra các hàng. Giữ các hàng nằm trong khoảng: PRICErange * .01 | KEEP | PRICErange * .99
Điều này được cung cấp cho tôi bởi Martin Smith trên stackoverflow, tôi đã chỉnh sửa câu hỏi này, vì vậy hãy bắt đầu từ đây.
;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
Tôi không chắc đây là những gì tôi cần làm. Tôi không biết có bao nhiêu hàng sẽ bị loại bỏ khỏi đầu.
Khi bạn nói "Xóa", bạn có nghĩa là lọc hoặc xóa? – KingCronus
ALso '1% hàng đầu được sắp xếp PRICE' không rõ ràng - bạn có muốn giảm số lượng bản ghi xuống 1% không? –
Bộ lọc. Tôi muốn nó ở lại trong tập dữ liệu, nhưng không hiển thị trong truy vấn này. Tôi đang cố gắng thực hiện một số kiểm soát ngoại lệ, nhưng cũng có thể quay lại và thực hiện lại quy trình với các ngoại lệ. Mặt khác, nếu đầu ra được đưa vào một bảng mới, thì nó có thể bị xóa hoàn toàn trong bảng mới. –