2017-06-06 56 views
1

在下面的图片中,您可以举例说明数据。我想首先发生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秒”对他们俩的。

任何想法如何区分这些行,并获得每个数据块的批处理启动

Example data

+0

什么用柱您的截图订单.. –

+0

@VaoTsun它是由_batch_start_ –

+0

有被勒令?最近一个非常类似的问题 - 让我看看它 –

回答

0

可能:选择批次,分(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上

+0

最终将layout_name列添加到您的select和group by子句中(如上所述或在加入的a + b部分中。 – PawelSz

1

这在我看来很简单问题:你只需要计算的值,这是对同一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 

http://rextester.com/XLX80303

相关问题