Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 忽略相隔时间小于X的结果_Tsql_Sql Server 2012 - Fatal编程技术网

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,这样每个块的第一行都会被包括在内。工作正常。谢谢