在具有相同值的窗口函数中划分不同行的块
在下面的图片中,您可以举例说明数据。我想首先发生batch_start每个批次。正如您所看到的(绿色突出显示),批量1522049发生在2个块中,其中一个有2行,第二个有1行。在具有相同值的窗口函数中划分不同行的块
SELECT FIRST_VALUE(batch_start) OVER (PARTITION BY batch ORDER BY batch_start)
没有解决不了的问题,因为它使两块到一个结果是“2013年1月29日10时27分23秒”对他们俩的。
任何想法如何区分这些行,并获得每个数据块的批处理启动?
可能:选择批次,分(batch_start)firstOccurance,MAX(batch_start)从yourTable组lastOccurance由一批
或尝试(保持您的查询的一部分): SELECT FIRST_VALUE(一个。 batch_start)从你的表中加入(从批表中选择batch,min(batch_start)firstOccurance,max(batch_end)lastOccurance)b在a.batch = b.batch上
最终将layout_name列添加到您的select和group by子句中(如上所述或在加入的a + b部分中。 – PawelSz
这在我看来很简单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
什么用柱您的截图订单.. –
@VaoTsun它是由_batch_start_ –
有被勒令?最近一个非常类似的问题 - 让我看看它 –