SQL中需要特殊加权排序

时间:2015-07-30 19:03:39

标签: sql-server tsql

我有一个包含3列的单个表Id (uniqueidentifier), Count (int) and CreatedOn (timestamp)。我需要能够使用加权算法进行排序,而不是(这是我现在拥有的),按"ORDER BY Count DESC, CreatedOn DESC"排序,我需要分配以下加权算法:

  • 如果CreatedOn时间戳在过去30天内,我需要提升,如果记录是在1天前创建的,则计数:90%,CreatedOn:10%
  • 每天在30天内过去,Count降至50%,CreatedOn开始达到峰值50%并在30天达到50%
  • 30天后,随着每一天的过去,体重开始下降到0,未来30天的体重增加到100%
  • 60天后,它停留在Count为100%且CreatedOn保持在0%
  • 的位置

1 个答案:

答案 0 :(得分:0)

首先,对于您的情况,timestampnot 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