我有一个包含3列的单个表Id (uniqueidentifier), Count (int) and CreatedOn (timestamp)
。我需要能够使用加权算法进行排序,而不是(这是我现在拥有的),按"ORDER BY Count DESC, CreatedOn DESC"
排序,我需要分配以下加权算法:
答案 0 :(得分:0)
首先,对于您的情况,timestamp
为not a useful column type。使用datetime
。
你应该用计算列做到这一点。你的计算非常混乱,所以我只给出一个大纲,修复它以符合你的确切公式:
CREATE TABLE T1(
Id UNIQUEIDENTIFIER,
Count INT,
CreatedOn DATETIME,
Sort AS CASE
WHEN DATEDIFF(d, CreatedOn, GETDATE()) < 30 THEN
(Count * (0.9 - DATEDIFF(d, CreatedOn, GETDATE()) * 0.02) + DATEDIFF(ms, CreatedOn, GETDATE()) * (0.1 + DATEDIFF(d, CreatedOn, GETDATE()) * 0.02)
WHEN DATEDIFF(d, CreatedOn, GETDATE()) BETWEEN 30 AND 60 THEN
/* Some other calculation... */1
ELSE Count /* As a 100%?? */
END
)
然后你可以在你的陈述中ORDER BY Sort
。