【发布时间】:2011-05-25 11:14:57
【问题描述】:
我有一个用户登录和注销标记列表。不幸的是,LOGIN 条目可能并不总是后跟 LOGOUT 条目。
当按 [event_date] 排序时,我希望删除与上一行具有相同 [event] 和 [user_id] 的任何行
有关如何执行此操作的任何建议?
示例表
CREATE TABLE #LOG (
[id] int IDENTITY(1,1),
[user_id] int,
[event] varchar(50),
[event_date] datetime
);
INSERT INTO #LOG ([user_id], [event], [event_date])
SELECT 1,'LOGIN',{ts '2010-12-15 15:31:59'}
UNION ALL SELECT 1,'LOGOUT',{ts '2010-12-15 15:32:55'}
UNION ALL SELECT 1,'LOGIN',{ts '2010-12-15 15:38:04'}
UNION ALL SELECT 1,'LOGOUT',{ts '2010-12-15 15:38:17'}
UNION ALL SELECT 1,'LOGOUT',{ts '2010-12-15 15:38:45'} -- Delete
UNION ALL SELECT 2,'LOGIN',{ts '2010-12-15 16:59:39'}
UNION ALL SELECT 2,'LOGOUT',{ts '2010-12-15 17:00:08'}
UNION ALL SELECT 2,'LOGOUT',{ts '2010-12-15 17:00:39'} -- Delete
UNION ALL SELECT 2,'LOGOUT',{ts '2010-12-15 17:01:16'} -- Delete
UNION ALL SELECT 2,'LOGIN',{ts '2010-12-15 17:01:38'}
UNION ALL SELECT 2,'LOGIN',{ts '2010-12-15 17:02:26'} -- Delete
UNION ALL SELECT 2,'LOGOUT',{ts '2010-12-15 17:02:39'}
【问题讨论】:
-
+1 教我一些新语法。我以前从未见过
{ts 'xxx'}before。 -
这是什么 {ts 'xxx'}?
-
从外观上看,
{ts 'xxx'}似乎与时间戳有关,非常有趣! -
它允许解析器确定数据类型,以免将其混淆为字符串,然后可能需要隐式转换为日期。
-
啊,{ts 'xxx'} 是 ODBC 日期时间格式。你可以在这里找到它:msdn.microsoft.com/en-us/library/ms190234%28v=sql.90%29.aspx
标签: sql sql-server sql-server-2005 sql-delete gaps-and-islands