2013-07-02 35 views
1

選擇所有,但最後一排我想拉除了最後一個用Oracle SQL中的所有行用Oracle SQL

我的數據庫是這樣

Prikey - Auto_increment 
common - varchar 
miles - int 

所以我想總結除了最後的所有行行按主鍵排序,按常用順序排列。這意味着對於每一個不同的共同點,英里將被總結(除了最後一個)

+0

檢查這個 http://stackoverflow.com/questions/470542/how-do-i-limit -the-number-of-rows-by-oracle-query-after-ordering – Yogesh

回答

5

注意:這個問題在這個答案發布後被改變了。前兩個查詢適用於原始問題。最後一個查詢(在附錄中)適用於更新後的問題。

這應該做的伎倆,雖然這將是較大的錶慢了一點:

SELECT prikey, authnum FROM myTable 
WHERE prikey <> (SELECT MAX(prikey) FROM myTable) 
ORDER BY prikey 

此查詢歷時較長,但對於一個大表它應該更快。我將讓您來決定:

SELECT * FROM (
    SELECT 
    prikey, 
    authnum, 
    ROW_NUMBER() OVER (ORDER BY prikey DESC) AS RowRank 
    FROM myTable) 
WHERE RowRank <> 1 
ORDER BY prikey 

附錄有一個更新的問題;這是更新的答案。

SELECT 
    common, 
    SUM(miles) 
FROM (
    SELECT 
    common, 
    miles, 
    ROW_NUMBER() OVER (PARTITION BY common ORDER BY prikey DESC) AS RowRank 
    FROM myTable 
) 
WHERE RowRank <> 1 
GROUP BY common 
+0

完成@GordonLinoff,謝謝! –

+0

這就是我要找的,非常感謝 – EGN

+0

抱歉再次回來,但是如果我想通過另一個字段進行分組。請參閱修訂後的問題 – EGN

0

貌似我有點爲時已晚,但這裏是我的貢獻,類似於埃德吉布斯第一個解決方案,但不是計算最大ID爲表中的每個值,然後比較,我得到一次使用內聯視圖。

 
SELECT d1.prikey, 
    d1.authnum 
FROM myTable d1, 
    (SELECT MAX(prikey) prikey myTable FROM myTable) d2 
WHERE d1.prikey != d2.prikey 

至少我認爲這是更有效的,如果你想不使用分析。

0

查詢檢索表中的所有記錄,除了第一排和最後一排

select * from table_name 
where primary_id_column not in 
(
    select top 1 * from table_name order by primary_id_column asc 
) 
and 
primary_id_column not in 
(
    select top 1 * from table_name order by primary_id_column desc 
)