sql - 比较日期然后插入数据

标签 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         3        2013-01-09 13:29:19.143

和第二个表:

UserId  TimeStamp 
--------------------------------
 1      2014-11-17 10:01:27.443
29      2013-01-05 16:28:52.557

如果第一个表中该 UserId 的计数超过 20(从 0 开始或在第二个表的新月份之后),则将在第二个表中插入数据。

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

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

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

关于sql - 比较日期然后插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34670645/

相关文章:

sql - 在数据库中,当我分组时,我的查询获取第一行

sql - Postgres 大于或空

SQL Server 占用完整内存后速度完全变慢

c# - Entity Framework Lambda 优化

sql - RDBMS 中基于表的关系和基于列的关系有什么区别?

sql - 存储和重用 INSERT ... RETURNING 返回的值

sql - 返回包含博客文本的整个表而不是选择特定列的性能

mysql - 这是解决sql中最低性能问题的好方法

entity-framework - Entity Framework Code First - 减少使用 .Load() 和 .Local 的往返

c# - Entity Framework - 唯一索引上的 UPSERT