Sql 比较日期,然后插入数据

Sql 比较日期,然后插入数据,sql,sql-server,entity-framework,linq,Sql,Sql Server,Entity Framework,Linq,我有一张这样的桌子: Id UserId EventTypeId TimeStamp ----------------------------------------------- 344 29 3 2013-01-08 16:28:52.557 350 12 3 2013-01-08 17:06:15.967 441 1 3 2013-01-09 11:00:43.947 461 1

我有一张这样的桌子:

Id  UserId  EventTypeId TimeStamp
-----------------------------------------------
344  29        3        2013-01-08 16:28:52.557
350  12        3        2013-01-08 17:06:15.967
441  1         3        2013-01-09 11:00:43.947
461  1         3        2013-01-09 13:29:19.143
March: 5 
April: 16 
May: 17
第二个表:

UserId  TimeStamp 
--------------------------------
 1      2014-11-17 10:01:27.443
29      2013-01-05 16:28:52.557
如果在第一个表中该用户ID的计数大于20(从0开始或在第二个表的新月份之后),则将在第二个表中插入数据

第一个表是注册表。员工注册用户,当他/她达到20个以上注册时,他/她将晋升。促销日期已插入并将插入第二个表中

例如,如果他/她将这样注册用户:

Id  UserId  EventTypeId TimeStamp
-----------------------------------------------
344  29        3        2013-01-08 16:28:52.557
350  12        3        2013-01-08 17:06:15.967
441  1         3        2013-01-09 11:00:43.947
461  1         3        2013-01-09 13:29:19.143
March: 5 
April: 16 
May: 17
在4月30日59:59:59之后,必须将该时间插入第二个表中,然后必须从头开始计数


如何才能做到这一点?

我的理解是,当第一个表(注册)出现新条目时,您希望在第二个表中插入记录。您可以通过使用插入触发器来实现这一点。 这里,插入的表包含现有记录和新记录

    CREATE TRIGGER trig_check_count
    ON [Registration]
    FOR INSERT
    AS
    Begin
     DECLARE @USERID  INT, @COUNT INT
     --FIND USERID FOR INSERTED RECORD
     Select @USERID = I.USERID 
     from Inserted i
     Left Join registration R 
     on R.ID = I.ID AND R.USERID = I.USERID
     where R.ID is null

     --COUNT - START FROM THE PREVIOUS PROMOTION DATE till current date
     SELECT @COUNT = COUNT(I.USERID)
     FROM INSERTED I
     LEFT JOIN PROMOTION P ON I.USERID = P.USERID
     WHERE USERID = @USERID
     AND I.TIMESTAMP > MAX(P.TIMESTAMP)

  -- INSERT TO SECOND TABLE IF COUNT > 20

    IF(@COUNT > 20)
    BEGIN
     INSERT INTO PROMOTION
     SELECT @USERID,GETDATE()
   END

 End

海伦的扳机是个好主意。我只是用另一种方法来做这件事,也许不如Hiren XD好

   select 
     usr.ID,
     usr.USERID,
     usr.EventTypeID,
     usr.TimeStampID,
      COUNT(case when rcd.UserID IS Null then 1 
                 when rcd.UserID IS not null 
                  and rcd.TS< usr.TimeStampID then 1
                  else 0 end)over(partition by UserID) as cnt 
  from table1 usr 
  left join (select UserID,Max(TimeStamp)as TS from table2 group by UserID) rcd 
  on usr.UserID=rcd.UserID