MSSQLSERVERの回答...
DECLARE
@min_time DATETIME,
@max_time DATETIME,
@min_price MONEY,
@max_price MONEY
SELECT
@min_time = MIN(timestamp),
@max_time = MAX(timestamp),
@min_price = MIN(price),
@max_price = MAX(price)
FROM
yourTable
SELECT
*
FROM
yourTable
ORDER BY
(CAST(DATEDIFF(second, @min_time, timestamp) AS FLOAT) / CAST(DATEDIFF(second, @min_time, @max_time) AS FLOAT)) * @slider
+
(CAST(price - @min_price AS FLOAT) / CAST(@max_price - @min_price AS FLOAT)) * (1 - @slider)
-- Where te slider value is anything between 0 and 1
あなたの感情を機能させるために、私は時間と価格の両方に対して同じ計算を行います-私はそれらを0から1までの値に変換します(これを私はそれと呼びますpositional weight
)。
-0.0=そのフィールドの最小値に等しい-0.5=そのフィールドの最小値
と最大値の中間のExaclty
-1.0=そのフィールドの最大値に等しい
次に、位置の重みにスライダーの値(または1つの値)を掛けて、2つの結果を合計します。
スライダーが0または1の場合、それは簡単です。1つの位置の重みは1で乗算され、1つの位置の重みは0で乗算されます。つまり、1つの位置の重みは変更されず、1つの位置の重みは無視されます。
スライダーが0.5のとき、各位置の重みの半分が合計されます。
値の99.999%が近接していて、極端な外れ値が1つある場合、これにより、そのフィールドが異常に優勢になるか、またはその逆になる可能性があります。(ほとんどの位置の重みは0または1に非常に近いです)
そのため、1つのオプションは、データの順序のみに基づいて位置の重みを設定することです。したがって、多くの値が近いが、極端な外れ値が1つある場合。リストの中央にある値は、位置の重みとして0.5が与えられます。つまり、実際の値ではなく、シーケンス内での位置が重要です。
DECLARE
@count FLOAT
SELECT
@count = CAST(COUNT(*) AS FLOAT)
FROM
yourTable
WITH
ordered_data
AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY timestamp) AS time_id,
ROW_NUMBER() OVER (ORDER BY price) AS price_id,
*
FROM
yourData
)
SELECT
*
FROM
ordered_data
ORDER BY
(CAST(time_id AS FLOAT) / @count) * @slider
+
(CAST(price_id AS FLOAT) / @count) * (1 - @slider)
どちらが最適か、理由などは統計的になり始め、正確に何を達成しようとしているかによって異なります。たぶん、2つの異なる位置の重みの平均を取り、それらを使用することができますか?うまくいけば、これはあなたに仕事をする何かを与えるでしょう。
どちらの回答positional weight
も、をパーセンテージに強制します。これは、TIMEとPRICEのスケールが大きく異なる可能性があるためです。それらをパーカンテージ(0から1)にすると、それらは同じスケールになります。適切なスケールを選択するための代替メカニズムを検討することをお勧めします。これらはフィールドごとに異なる場合があります。
各回答は、リストの一番下の項目である固定小数点に対する位置の重みを計算します。MEAN、MODE、MEDIANなどの他の参照ポイントを選択することもできます。そうすることで、(-xから+ y)の位置の重みの範囲が得られ、xとyは潜在的に非常に異なる値になります。次に、これらを(-1から+1)に再重み付けすることを選択できます。これには、曲線に沿ってそれらをスケーリングする必要があり、その曲線を決定する方法を決定する必要があります。
各回答は、固定参照点からの「距離」を0から1、または前の段落の-1から+1として計算します。これは、時間と価格の両方が常に等しく重要であることを前提としています。しかし、位置の重みが常に1に近いはずの高価なアイテムのみを選択した場合はどうなるでしょうか?「すべての現在価値」ではなく、「すべての可能な値」に対してスケーリングするメカニズムが必要になります。
ここには多くの選択肢があり、どの選択が正しいか間違っているかは、設定した機能要件によって異なります。私は見つけるべき普遍的な真実があるとは思わない。おそらく、いくつかの例を作成し、何をしたいのかを理解してから、どのように解決する必要がありますか?