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