2016-04-28 70 views
1

的分日我有一个日志表是这样的:SQL:寻找最后的类型变化

line Date     status Type 
1 26.04.2016 08:58 IN 4 
2 26.04.2016 08:59 OUT 80 
3 26.04.2016 09:05 REZ 7 
4 26.04.2016 09:06 IN 7 
5 26.04.2016 09:22 EDIT 81 
6 26.04.2016 09:23 EDIT 80 
7 26.04.2016 09:24 OUT 80 
8 26.04.2016 09:25 OUT 80 
9 26.04.2016 09:25 OUT 80 

“日期”是关键。

我想获取上次类型更改日期。在这个例子中,最后一个类型是“80”,它的最小日期是26.04.2016 09:23(第6行)。

我知道此时的最后一种类型(@lasttype = 80)。 但是,如果我跑select min(date) from table where type = @lasttype,然后我得到的,而不是线6

线2我怎样才能获得“类型”在一个查询(6号线)的最后一块的分日期?我不想在后面和后面使用几个选择。

我只是尝试这个,但6号线不会再来:(

select max(date) 
from 
(
    select min(date) as date, type 
    from MYTABLE 
    where type = '80' 
    group by type 
) as t1 

有没有一种简单的方法

非常感谢

编辑:? 好吧,我可以获得第6行:

select min(date) from MYTABLE where date > (select max(date) from MYTABLE where type <> @lasttype) 

更有效的代码?

非常感谢您的回答...

+1

您正在使用什么RDBMS? –

+0

Microsoft Sql 2014 –

+0

第6行是Type 80的最小值?第2行的时间比这少。此外,“上次类型更改日期”是什么意思?状态栏在您的要求中扮演什么角色? –

回答

0

好吧,我可以让6号线:

select min(date) from MYTABLE where date > (select max(date) from MYTABLE where type <> @lasttype) 

更有效的代码?

非常感谢您的回答...

0

尝试这个

select min(date) from MYTABLE where [email protected] 
group by Type 
+0

对不起,它返回第2行。我想获取最后一个类型块的最短日期(必须在第6-7-8-9行中获得第6行)。 –

0

我认为,如果你想找回过去的时候,你最好使用最多的,而不是分钟时,请检查下面:

select top 1 type,max(date) as date from MYTABLE group by type order by max(date) desc 
+0

没有。我返回第9行。我想获得最后一个类型块的最后日期(必须在第6-7-8-9行中获得第6行)。 –

0

尝试运行该查询

select max(a.Date) from 
(
Select top 4 * from table order by Date desc 
)a;