C# 通过比较行来查找结束日期之间的差异

C# 通过比较行来查找结束日期之间的差异,c#,sql,linq,tsql,sql-server-2008,C#,Sql,Linq,Tsql,Sql Server 2008,我有一张桌子 ---------- User ---------- userID(pk) startdate // update : i am not using this field. enddate 我需要比较行之间的结束日期,比较是否超过3天,并计算用户ID 我正在做类似的事情 WHILE @@FETCH_STATUS = 0 BEGIN select @lastrowID = max(rowid) from @User if (@userid = (select use

我有一张桌子

----------
User
----------
userID(pk)
startdate // update : i am not using this field.
enddate
我需要比较行之间的结束日期,比较是否超过3天,并计算用户ID

我正在做类似的事情

WHILE @@FETCH_STATUS = 0
BEGIN

   select @lastrowID = max(rowid) from @User
   if (@userid  = (select userId from @User where rowid = @lastRowID))
   begin
       update @User set NextEndDate= @endDate where rowid = @lastRowID and userid = @userid
   end
   else
   begin
       insert @UserTable (userid, EndDate,NextEndDate) values (@userid, @endDate,@NextEndDate)
   end
END
我的想法是在表中循环并创建一个nextend日期,然后使用datediff查找比较。我一直坚持创建nextend date的第一部分,我相信比较的第二部分会很容易。我被夹在中间

我的问题是我做的对吗,事情变得很复杂。 我不知道是通过sql查询获得结果,还是使用Linq或类似的代码来使用C

更新: 抱歉,如果我在解释我的场景时不清楚:我正在尝试查找客户访问次数的计数。 前任: userid:1可以每天访问一次,也可以每月访问一次。所以我需要得到用户访问的频率。所以如果用户访问的结束日期是

userid     enddate
1          1/1/2010
1          1/2/2010  count 1
1          1/10/2010 count 2 difference is more than 3 days
1          1/13/2010 count 2 ( because diff is less than 3 days)
这就是我应该如何计算的,这就是为什么我试图使用游标,这对我来说太复杂了,无法解决。感谢您的指导。

编辑


一个子查询,当开始日期小于结束日期的三天时,每行返回1,否则可以求和0以得到总数。

好的,我现在了解您的问题了。我知道在SQL中有更好的方法可以做到这一点,也许是使用CTE,但是这个解决方案应该可以工作,并且不使用游标。这将为您提供一个完整的表,其中包含上一个enddate的datediff(如果适用)。然后可以根据datediff从中进行选择

select u1.*, datediff(day, u2.enddate, u1.enddate) as days from
    (
    select userid, enddate, row_number() over(partition by userid order by userid, enddate) as rownumber
    from [user]
    ) u1
    left join 
    (
    select userid, enddate, row_number() over(partition by userid order by userid, enddate) as rownumber
    from [user]
    )u2
    on u1.userid = u2.userid
    and u1.rownumber = u2.rownumber + 1

我看不到你在这个光标循环中的任何地方计数。你能清楚地解释你想得到什么吗?很可能有一种方法可以在不使用游标的情况下执行此操作。sql server 2008版本@cdonner我陷入了创建nextenddate的第一部分,以便与同一行中的nextenddate和enddate进行比较。如果我得到了正确的结果,下一部分我将通过比较来计算,但我真的不想使用游标。还有别的办法吗。谢谢。谢谢阿梅尔文,但我没有使用startdate,我需要比较特定用户id每行的结束日期。谢谢jlnorsworthy,我已经更新了我的问题,解释了我的场景。我需要为每一行计算,而不是为特定用户计算最小值和最大值。好的,我现在就知道了。。。这当然可以在sql中完成,我必须拿出我的sql食谱书:尽管sql专家可以轻松回答
select u1.*, datediff(day, u2.enddate, u1.enddate) as days from
    (
    select userid, enddate, row_number() over(partition by userid order by userid, enddate) as rownumber
    from [user]
    ) u1
    left join 
    (
    select userid, enddate, row_number() over(partition by userid order by userid, enddate) as rownumber
    from [user]
    )u2
    on u1.userid = u2.userid
    and u1.rownumber = u2.rownumber + 1