Sql server SQL中需要特殊的加权排序

Sql server SQL中需要特殊的加权排序,sql-server,tsql,Sql Server,Tsql,我有一个包含3列的表,Id uniqueidentifier、Count int和CreatedOn timestamp。我需要能够使用加权算法进行排序,这里不是我现在拥有的,而是按照Count DESC、CreatedOn DESC的顺序进行排序,我需要分配以下加权算法: 如果CreatedOn时间戳在最近30天内,我需要一个渐变,如果记录是在1天前创建的,计数:90%,CreatedOn:10% 随着30天内每天的流逝,计数下降到50%,CreatedOn开始达到50%的峰值,并在30天达到

我有一个包含3列的表,Id uniqueidentifier、Count int和CreatedOn timestamp。我需要能够使用加权算法进行排序,这里不是我现在拥有的,而是按照Count DESC、CreatedOn DESC的顺序进行排序,我需要分配以下加权算法:

如果CreatedOn时间戳在最近30天内,我需要一个渐变,如果记录是在1天前创建的,计数:90%,CreatedOn:10% 随着30天内每天的流逝,计数下降到50%,CreatedOn开始达到50%的峰值,并在30天达到50%的峰值 30天后,随着时间的推移,体重开始下降到0,计数重量在接下来的30天内增加到100% 60天后,它停留在计数为100%,CreatedOn停留在0%的位置 首先,时间戳适用于您的案例。使用日期时间

您可能应该使用计算列来执行此操作。你的计算相当混乱,所以我只给出一个大纲,修正它以匹配你的精确公式:

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
)

然后您可以在对账单中按排序。

您是否尝试过计算每行的权重并按其排序?我们可以看看您的代码吗?谢谢,计算列完全有意义。我将尝试你的方法并报告back@TimJohnson如果你真的想感谢我,我的答案左边有一个向上的三角形。点击它。这很有趣。至少在SQL标准中没有datetime这样的东西。时间戳正是日期和时间类型的组合,即高精度时间戳。我们这里有什么?标准的两倍偏差……@Amit你能告诉我公式的作用吗?有数学参考资料我可以查一下吗。我真的很感激你从哪里得到这个或者你想要什么used@TimJohnson-你问的是哪种配方?我的答案中的任何大写字母都是标准的TSQL,例如,你可以在谷歌上搜索TSQLDatediff。