SQL:查找上次类型更改的最小日期

时间:2016-04-28 08:15:27

标签: sql sql-server sql-server-2014

我有一个这样的日志表:

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,那么我得到第2行而不是第6行。

如何获得"类型"的最后一个块的最小日期? (第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)

更有效的代码?

非常感谢你的回答......

4 个答案:

答案 0 :(得分:0)

试试这个

select min(date) from MYTABLE where Type=@lasttype
group by Type

答案 1 :(得分:0)

我想如果您想上次检索,最好使用max而不是min函数,请查看以下内容:

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

答案 2 :(得分:0)

好的,我可以得到第6行:

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

更有效的代码?

非常感谢你的回答......

答案 3 :(得分:0)

尝试运行此查询

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