MS SQL返回N的最后一个实例后的所有行
我有一个MS SQL查询返回计算机执行的步骤列表。它具有按每个步骤执行时间排序的步骤编号。我的问题是,有时这些步骤会重复,但我只想返回步骤1-> n的最后一个序列。所以我想用第一步取最后一行,并且只返回那一行以及之后的任何内容。MS SQL返回N的最后一个实例后的所有行
SELECT Time,Step FROM Table1
WHERE Computer = 'ComputerName'
AND Step IS NOT NULL
ORDER BY Time
信息返回...
Time Step
00:01 1
00:02 2
00:03 3
00:04 1
00:05 2
00:06 3
00:07 4
我想忽略的步骤1的最后一个序列之前,一切> n和只返回...
Time Step
00:04 1
00:05 2
00:06 3
00:07 4
步骤将始终以1开头,但步骤数可能会有所不同。数字或重复也可以根本不改变任何次数。
任何帮助,将不胜感激。
感谢
的MAX(时间)给了我一个想法,我相信我想通了。我只需要在执行最后一步之后使用WHERE语句来获取所有内容。
SELECT Time,Step FROM Table1
WHERE Computer = 'Computer1'
AND Step IS NOT NULL
AND TIME >= (SELECT MAX(Time) FROM Table1 WHERE Computer = 'Computer1' AND Step = 1)
ORDER BY Time
SELECT distinct t2.time, t1.step
FROM Table1 t1
JOIN (Select MAX(time) time, step
FROM table1
GROUP BY step) as t2 ON t2.step = t1.step
ORDER BY step
子查询和联接是过度杀伤 - 这个小表很好,但是任何大量的步骤都会比没有它的简单GROUP BY和MAX指数级更长。 – AutomationNation
我可能会让我的思维复杂化。但是由于问题中提到的限制,我认为这种思路是必要的;步骤可以重新启动,只需要最后一次出现。感谢downvote! ;) – WickedFan
这个对我来说也是最有意义的。 –
这一个不符合你原来的问题。如果第3步出现在第2步之前,则不显示第3步。 – WickedFan
什么会导致第3步不显示?这应该返回在最近的步骤1之后发生的任何事情。 – APB