Ich habe eine Tabelle mit float
Werte. Ich möchte eine Teilmenge (A) dieser Werte verwenden, um Ränge unter Verwendung von zu erstellen. Dann möchte ich einer zweiten (nicht-schneidenden) Teilmenge (B) von Werten in der Tabelle Ränge auf der Basis der von der ersten Teilmenge (A) abgeleiteten Ränge zuordnen. Einfaches Verbinden von Werten von (B) mit Werten in (A) funktioniert nicht, da die Werte von Teilmenge (B) im Allgemeinen nicht den Werten in Teilmenge (A) entsprechen. In diesem Fall bin ich in Ordnung, entweder einen "nächstliegenden Wert" -Ansatz oder einen "lineare Interpolation" -Ansatz zu verwenden, um die Ränge zu erhalten. Ich bevorzuge Schnelligkeit und Einfachheit, da ich es mit Hunderttausenden von Zeilen zu tun habe.Wie rangiert man einen Datensatz mit einem anderen in SQL?
Hier ist ein konkretes Beispiel (Teilmenge A annehmen, wo Flag = 0 und Teilmenge B, wo Flag = 1):
DECLARE @Data TABLE
(
Value FLOAT,
Flag BIT
)
INSERT INTO @Data SELECT 0.081, 0
INSERT INTO @Data SELECT 0.831, 0
INSERT INTO @Data SELECT 0.798, 0
INSERT INTO @Data SELECT 0.722, 0
INSERT INTO @Data SELECT 0.322, 0
INSERT INTO @Data SELECT 0.186, 0
INSERT INTO @Data SELECT 0.494, 0
INSERT INTO @Data SELECT 0.757, 0
INSERT INTO @Data SELECT 0.996, 0
INSERT INTO @Data SELECT 0.146, 0
INSERT INTO @Data SELECT 0.514, 1
INSERT INTO @Data SELECT 0.787, 1
INSERT INTO @Data SELECT 0.125, 1
INSERT INTO @Data SELECT 0.324, 1
INSERT INTO @Data SELECT 0.86, 1
--Subset A
SELECT *,
Rnk = PERCENT_RANK() OVER (ORDER BY Value)
FROM @Data
WHERE Flag = 0
--Subset B
SELECT *,
Rnk = ?--Ranking based on ranks derived from subset A
FROM @Data
WHERE Flag = 1
Diese [link] (http://sqlmag.com/t-sql/last-non-null-puzzle) endete mir ein Bündel zu einer sehr schnellen Lösung zu helfen. – Joe