在下图中,您可以举例说明数据。我希望每个批次首次出现 batch_start 。如您所见(绿色突出显示)批处理1522049发生在2个块中,一个有2行,第二个有1行。
SELECT FIRST_VALUE(batch_start) OVER (PARTITION BY batch ORDER BY batch_start)
没有解决问题,因为它将两个块连接成一个,结果是'2013-01-29 10:27:23'对于它们。
知道如何区分这些行并获取每个数据块的 batch_start 吗?
答案 0 :(得分:1)
在我看来这是一个简单的gaps-and-islands问题:您只需要计算一个值,对于相同batch
值的每个后续行都是相同的,这将是
row_number() over (order by batch_start) - row_number() over (partition by batch order by batch_start)
由此,解决方案取决于您希望如何处理这些“批处理组”。 F.ex.这是一个变体,它将聚合它们,以找出哪个是第一个batch_start
:
select batch, min(batch_start)
from (select *, row_number() over (order by batch_start) -
row_number() over (partition by batch order by batch_start) batch_number
from batches) b
group by batch, batch_number
答案 1 :(得分:0)
可能:批量选择batch,min(batch_start)firstOccurance,max(batch_start)来自yourTable组的lastOccurance
或尝试(保留您的部分查询): 从你的表a中选择FIRST_VALUE(a.batch_start)OVER(a.batch ORDER by a.batch_start的PARTITION) 在a.batch = b.batch
上加入(从批次中选择批次,分钟(批次编号)firstOccurance,max(batch_end)lastOccurance)