2015-09-07 77 views
0

我想寫一些最終將用於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

你嘗試通過排序MIN(TIMESTAMP)? –

+0

@DavidAldridge對不起忘了把它放在我的簡化選擇語句。是的,那將按順序排列所有的值。但我想保留同一個堆棧的所有行。 –

+0

您是否介意提供與您的樣本結構和數據相匹配的查詢? – sstan

回答

1

您的示例結構+數據與查詢之間有一點不匹配。

但總的想法是,您可以通過在您的order by子句中使用分析函數來獲得要查找的內容。事情是這樣的:

select * 
from paint_table 
order by min(timestamp) over (partition by stack), stack 

編輯

如果這個想法是,你想要的min(timestamp)stack確定,然後有依據的排序,但在同一時間,你要組雙方stacklot,那麼你可以這樣做:

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 
+0

我認爲這是我需要的。要進一步測試它以確保。謝謝! –

+0

我添加了一個編輯,我認爲這會讓你更接近(如果我理解你的查詢的意圖)。 – sstan