2015-10-01 47 views
0
LotNumber Device MeasureDate RowNumber 
LotA  DevA 10/1/15 0:00 1 
LotA  DevA 10/1/15 1:00 1 
LotA  DevB 10/1/15 2:00 2 
LotB  DevA 10/1/15 3:00 3 
LotB  DevA 10/1/15 4:00 3 
LotA  DevA 10/1/15 5:00 4 

我想根據LotNumber和Device組生成RowNumber列。只要批次和設備相同,則rownumber將相同。訂單是通過測量。在排序組上的行號。 Oracle SQL

+0

看來你正試圖給他們ROWNUMBER基於lotnumber和設備,而是根據你已公佈了其已經在那裏的數據。數據是否發佈了您的預期輸出或什麼?你能解釋一下你正在嘗試做什麼嗎?並請張貼你到目前爲止所做的事情。謝謝 – brenners1302

+0

Rownumber是我想要的輸出,它是我需要產生的。 – daniel

+0

你有沒有嘗試過任何答案,其中一個答案應該工作,我假設。 – brenners1302

回答

1

這可以通過在內聯視圖中使用LAG分析函數完成,然後在累計和之後僅當這些值與上一行不同時進行求和。

select lot_number, 
     device, 
     measure_date 
     sum(case when last_lot_number = lot_number and last_device = device 
       then 0 
       else 1 end) over (order by measure_date) as row_number 
    from (select lot_number, 
       device, 
       measure_date, 
       lag(lot_number) over(order by measure_date) as last_lot_number, 
       lag(device) over(order by measure_date) as last_device 
      from your_table) 
order by measure_date 

SQLFiddle Demo

+0

這是工作 – daniel

0

如果你只是想生成rownumbers一樣顯示的內容。你可以試試這個

SELECT Lotnumber, 
     Device, 
     MeasureDate, 
     DENSE_RANK() OVER (ORDER BY MEASURE DATE) AS RowNumber 
FROM TABLE 
+0

這沒有給出所需的輸出。 rownumber成爲每行1-6的排列數。 – daniel

+0

我認爲Balakumar的答案是正確的,你只需在最後通過度量來添加訂單。 – brenners1302

0
Use Dense_rank to get desired output. 
create table device (lotnumber varchar2(5), device varchar2(5), measuredate date); 
insert into device values ('LotA','DevA', sysdate); 
insert into device values ('LotA','DevA', sysdate); 
insert into device values ('LotA','DevB', sysdate); 
insert into device values ('LotB','DevA', sysdate); 
insert into device values ('LotB','DevA', sysdate); 
insert into device values ('LotA','DevA', sysdate); 

Use below query to get desired output. 
SELECT * FROM (SELECT DEVICE.*, DENSE_RANK() OVER(ORDER BY LOTNUMBER, DEVICE) RM FROM DEVICE) ; 
+0

這沒有給出所需的輸出。在排列等級時未將測量結果考慮在內。 – daniel

+0

嘗試通過measuredate添加順序 – brenners1302

+0

從 SEQ 以上(由RK順序)選擇 lotnumber, 設備, measuredate, DENSE_RANK()( 選擇 X *, LAST_VALUE(R忽略空值)以上(順序通過從 measuredate)作爲RK ( 選擇 d *, 情況 當lotnumber!=滯後(lotnumber)以上(由measuredate順序)或 以上(由measuredate順序)或 設備!=滯後(裝置) row_number()over(order by measuredate)= 1 then row_number()over(order by measuredate) end from r from device d )x ) order by 3; 試試這個查詢.. –