2016-07-14 54 views
0

我是新来的sql服务器。有没有一种方法可以比较前两行的时间?我的身份证是独一无二的,所以如果我再添加一次我想要改变我的查询的价值。如果我的问题不清楚,我想知道最后2行btw的时差。SQL SERVER时间和行比较

EXAMPLE TABLE

+1

请添加预期的结果以及一些样本数据 – TheGameiswar

+0

你想要最后两行的时间差吗? –

+0

是的,先生对不起,如果我的问题不清楚。 – newbiesqlserver

回答

0

你也许可以想出下面的解决方案的36种。如果你能理解它们,你将在这个过程中学到很多SQL。

-- scalar subqueries 
select datediff(second, max("time"), (select max("time") from T)) as difference 
from T 
where "time" < (select max("time") from T) 

-- correlated subquery 
select datediff(
      second, 
      (select t2."time" from T as t2 where t2."time" < t."time"), 
      t."time") as difference 
from T as t 
where t.id = (select max(id) from T) 

-- self outer joins 
select datediff(second, max(t2."time"), max(t."time")) as difference 
from T as t left outer join T as t2 on t2."time" < t."time" -- by time 

select datediff(second, max(t2."time"), max(t."time")) as difference 
from T as t left outer join T as t2 on t2.id = t.id - 1 -- by id 

-- cross apply 
select datediff(second, max(prev."time"), max(t."time")) as difference 
from T as t cross apply 
    (select max("time") from T as t2 where t2."time" < t."time") as prev("time") 

-- cte with case expression 
with max_time("time") as (select max("time") from T) 
select min(case when t."time" <> max_time."time" 
      then datediff(second, t."time", max_time."time") end) as difference 
from T as t cross apply max_time 

-- derived table and analytic functions 
select difference 
from (
    select 
     row_number() over (order by "time" desc) as rn, 
     datediff(second, lag("time") over (order by "time"), "time") as difference 
    from T 
) T2 
where rn = 1 
0

,如果他们的数字可以直接比较日期。

SELECT id FROM table WHERE time >= '2016-07-15' 

为了得到区别两个时间之间,使用DATEDIFF

http://www.techonthenet.com/sql_server/functions/datediff.php

+0

您需要将日期文字用单引号括起来。最好使用符合ANSI的yyyy-mm-dd。在这种情况下,它将是'2016-07-05'。 –

+0

现在你修复了语法,我没有看到这是如何回答这个问题的。当然,我们也不知道问题是什么。 ;) –

+0

我在想,他的问题实际上只是“我不知道如何比较日期”,所以我只是想指出他的方向是正确的。猜猜我可能已经等待澄清,但:p – Caius