Tsql 忽略相隔时间小于X的结果
我目前拥有的数据与下表类似:Tsql 忽略相隔时间小于X的结果,tsql,sql-server-2012,Tsql,Sql Server 2012,我目前拥有的数据与下表类似: UserId VisitDate 1 2012-01-01 00:15:00.000 1 2012-01-01 00:16:00.000 1 2012-01-12 00:15:00.000 1 2012-01-12 00:16:00.000 1 2012-01-24 00:15:00.000 1 2012-01-24 00:
UserId VisitDate
1 2012-01-01 00:15:00.000
1 2012-01-01 00:16:00.000
1 2012-01-12 00:15:00.000
1 2012-01-12 00:16:00.000
1 2012-01-24 00:15:00.000
1 2012-01-24 00:16:00.000
我只想返回相隔10天或更长时间的结果,这样看起来:
UserId VisitDate
1 2012-01-01 00:15:00.000
1 2012-01-12 00:15:00.000
1 2012-01-24 00:15:00.000
可能比我说的要简单,但是在transact-sql中如何实现这一点呢?在这种情况下,您可以使用新的
lag()
函数:
比如:
SELECT UserId, VisitDate
FROM(
SELECT UserId,
VisitDate,
LAG(VisitDate,1,'1900-01-01')OVER(PARTITION BY UserId ORDER BY VisitDate) PrevVisitDate
FROM dbo.YourTable
)X
WHERE DATEDIFF(day,PrevVisitDate,VisitDate)>=10;
您可以在这里看到它的作用:您使用的是哪个版本的SQL Server?@SebastianMeine哎呀,在标签中添加了SQL-Server-2012。我打赌这会有帮助:)太好了!这看起来会有帮助。
X
的作用是什么?如果在FROM
关键字后面使用子查询,则需要为其命名。我通常在那里使用一个X
,尽管最好使用一个更具描述性的名称……啊,这很有意义。不幸的是,这里是返回的结果;每个用户都有相同的日期和时间?对我来说似乎工作正常。我在答案中添加了一个SQLFIDLE链接。我还必须为LAG
函数添加一个默认值1900-01-01,这样每个块的第一行都会被包括在内。工作正常。谢谢