SQL根据活动日期

时间:2017-10-15 19:40:08

标签: sql sql-server

我有列值" DateThru"具有根据数据库更新日而更改的日期值。我有一些内部加入表,并且我试图得到一个列(Alloc)的总和直到" DateThru"日期。我尝试使用

限制表格
  where ActivityDate <='DateThru'

但是我在任何时候尝试使用where子句时都会收到服务器错误。

我所拉的桌子看起来像这样

    Month  ActivityDate  Alloc
    ---------------------------
     x     2017-10-01    .0238
     x     2017-10-02    .0302
     x     2017-10-03    .0156
     x     2017-10-04    .0200
     x     2017-10-05    .0321
     x     2017-10-06    .0123
     x     2017-10-07    .0248

说&#34; DateThru&#34;是2017-10-05。 我想将Alloc从10-1加到10-5给出结果&#34; .122&#34;作为MTDAlloc。

这可以作为&#34; windows功能&#34;或者在哪里? 谢谢!

我使用sum over partition来获得总数

我有正确的工作和组织。我的问题是,现在每个&#34; r&#34;都有重复的条目。所以当我将ActiveDate&lt; = DateThru更改为&#34; =&#34;它修复了我的重复问题,但没有完全解决MTDAlloc问题。我确实使用了&#34; sum列&#34;创建另一个所以我不能使用rownumber()排名来删除重复项。

    Month  rep  goal  MTDAlloc
    ----------------------
    x    r1    20    .122          
    x    r1    20    .122  
    x    r1    20    .122          
    x    r2    20    .122
    x    r2    20    .122        
    x    r2    20    .122

最终结果将是每个独特的&#34; r&#34;在一排。

    Month  rep  goal  Alloc
    ----------------------
    x    r1    20    .122         
    x    r2    20    .122 

真的感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您的问题可能只是单引号。根据您的描述,这应该有效:

where ActivityDate <= DateThru

单引号使值成为字符串。与日期的比较使SQL Server希望将其转换为日期。 'DateThru'未被视为有效日期。

编辑:

我的猜测是,尽管它的名字,DateThru实际上是一个字符串。您可以使用以下方法找到有问题的值:

select DateThru
from . . .
where try_convert(datetime, DateThru) is null;