【发布时间】:2016-04-28 21:50:01
【问题描述】:
我有一个这样的日志表:
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)
还有更有效的代码吗?
非常感谢您的回答...
【问题讨论】:
-
你使用的是什么 rdbms?
-
微软 Sql 2014
-
为什么第 6 行是 Type 80 的最小值?第 2 行的时间比这要短。另外,“最后一次类型更改日期”是什么意思?状态列在您的需求中是否起任何作用?
-
嗨,Akanksha,我必须找到最后一次更改类型的时间。在这个例子中,首先是“4”,然后变成“80”,然后变成“7”....但是在09:23它已经变成了“80”(第6行)。在第 7-8-9 行,类型没有改变。所以,我试着找到第 6 行。
标签: sql sql-server sql-server-2014