Ho una tabella che contiene i percentili da un set di dati di riferimento.
CREATE TABLE [Core].[RiskFactor](
[SpecialtyCode] [char](2) NOT NULL,
[RiskCategoryId] [int] NOT NULL,
[Percentile] [tinyint] NOT NULL,
[RiskFactor] [numeric](5, 4) NOT NULL
)
Ogni combinazione di SpecialtyCode e RiskCategoryId avrà 101 righe, per percentili da 0 a 100. Avevo preso in considerazione l'idea di avere 101 colonne, ma penso che le righe saranno le migliori, tuttavia, sono aperto a utilizzare le colonne se questo risulta superiore.
Questa tabella verrà utilizzata come parte di una metodologia di punteggio, cercando il percentile più vicino per un soggetto di prova. Ad esempio, arriverò a una certa quantità per l'oggetto del test, quindi voglio vedere quale RiskFactor è più vicino alla mia quantità (per un dato SpecialtyCode e RiskCategoryId). Una volta individuato il valore più vicino, utilizzerò il rango percentile nei calcoli del punteggio.
La mia migliore idea è stata quella di utilizzare:
SELECT TOP 1 [Percentile], ([RiskFactor] - @SubjectRiskFactor) AS Delta
FROM [RiskBenchmark].[Core].[RiskFactor]
WHERE [SpecialtyCode] = @SpecialtyCode
AND [RiskCategoryId] = @RiskCategoryId
AND ([RiskFactor] - @SubjectRiskFactor) >= 0
ORDER BY ([RiskFactor] - @SubjectRiskFactor)
ma ho la sensazione che ci sia una funzione che non ho considerato (ho pensato a BETWEEN e MIN e li ho scartati velocemente).