我正在尝试编写一些复杂的查询,最终将在Web应用程序中使用。我正在为堆栈,许多部件提取一个值,然后是该批次中的光盘数和最旧的时间戳值。我有一个用于堆栈的分组,很多可以让我找出该堆栈中该批次的光盘数量。
我想要做的是让堆栈与最旧的堆栈组合在一起。
这是现在看起来的一个例子:
STACK LOT COUNT(CONTAINER_ID) MIN(TIMESTAMP)
----- --- --------- --------------
001 4 3 8/30/2015 9:47:10
002 3 6 8/30/2015 12:22:03
001 2 10 8/31/2015 9:47:10
我希望它看起来更像这样:
STACK LOT COUNT(CONTAINER_ID) MIN(TIMESTAMP)
----- --- --------- --------------
001 4 3 8/30/2015 9:47:10
001 2 10 8/31/2015 9:47:10
002 3 6 8/30/2015 12:22:03
这些只是表格的简短示例我是20个不同的堆栈ID,每个堆栈可能有3或4个批次。
我尝试过分区,但是当我进一步研究它时,我不确定这是否是我真正想要使用的。
SELECT STACK, LOT, COUNT(CONTAINER_ID), MIN(TIMESTAMP)
FROM PAINT_TABLE
GROUP BY STACK, LOT
ORDER BY MIN(TIMESTAMP)
答案 0 :(得分:1)
您的示例结构+数据与查询之间存在一些不匹配。
但一般的想法是,通过在order by
子句中使用分析函数,您可以获得所需内容。像这样:
select *
from paint_table
order by min(timestamp) over (partition by stack), stack
修改强>
如果您希望min(timestamp)
由stack
确定,然后根据该订单进行排序,但同时您希望按stack
进行分组和lot
,然后你可以这样做:
select stack, lot, count(container_id), min_stack_timestamp
from (select t.*,
min(t.timestamp) over (partition by t.stack) as min_stack_timestamp
from paint_table t)
group by min_stack_timestamp, stack, lot
order by min_stack_timestamp, stack, lot