[英]oracle query alternating records
我有一個看起來像這樣的表:
SEQ TICKER INDUSTRY
1 AAPL 10
1 FB 10
1 IBM 10
1 CSCO 10
1 FEYE 20
1 F 20
2 JNJ 10
2 CMPQ 10
2 CYBR 10
2 PFPT 10
2 K 20
2 PANW 20
我需要的是具有相同行業代碼的記錄,以在1和2記錄之間進行交替:
1 AAPL 10
2 IBM 10
1 FB 10
2 CSCO 10
1 FEYE 20
2 PANW 20
因此,基本上,按相同的行業代碼分組,在1條和2條記錄之間交替。
不知道如何。
使用分析函數創建一個針對每個組(行業和序列)重新開始的行號,然后按該行號進行排序。
select seq, ticker, industry
,row_number() over (partition by industry, seq order by ticker)custom_order
from stocks
order by industry, custom_order, seq;
有關完整示例,請參見此SQL Fiddle 。 (它與您的示例結果不完全匹配,但是您的示例結果不正確,或者這個問題我不理解。)
沒有看到您如何得出示例結果,但結果如下:
| SEQ | TICKER | INDUSTRY |
|-----|--------|----------|
| 1 | AAPL | 10 |
| 2 | CMPQ | 10 |
| 1 | CSCO | 10 |
| 2 | CYBR | 10 |
| 1 | FB | 10 |
| 2 | IBM | 10 |
| 1 | JNJ | 10 |
| 2 | PFPT | 10 |
| 1 | F | 20 |
| 2 | FEYE | 20 |
| 1 | K | 20 |
| 2 | PANW | 20 |
使用此查詢產生的,其中(我假設)您要為您計算SEQ列:
select
1 + mod(rn,2) Seq
, ticker
, industry
from (
select
ticker
, industry
, 1+ row_number() over (partition by industry
order by ticker) rn
from stocks
)
order by industry, rn
請注意,這是喬恩·海勒(Jon Heller)先前回答的衍生產品,可以在http://sqlfiddle.com/#!4/088271/1上在線找到該衍生產品。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.