選擇所有,但最後一排我想拉除了最後一個用Oracle SQL中的所有行用Oracle SQL
我的數據庫是這樣
Prikey - Auto_increment
common - varchar
miles - int
所以我想總結除了最後的所有行行按主鍵排序,按常用順序排列。這意味着對於每一個不同的共同點,英里將被總結(除了最後一個)
選擇所有,但最後一排我想拉除了最後一個用Oracle SQL中的所有行用Oracle SQL
我的數據庫是這樣
Prikey - Auto_increment
common - varchar
miles - int
所以我想總結除了最後的所有行行按主鍵排序,按常用順序排列。這意味着對於每一個不同的共同點,英里將被總結(除了最後一個)
注意:這個問題在這個答案發布後被改變了。前兩個查詢適用於原始問題。最後一個查詢(在附錄中)適用於更新後的問題。
這應該做的伎倆,雖然這將是較大的錶慢了一點:
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
貌似我有點爲時已晚,但這裏是我的貢獻,類似於埃德吉布斯第一個解決方案,但不是計算最大ID爲表中的每個值,然後比較,我得到一次使用內聯視圖。
SELECT d1.prikey, d1.authnum FROM myTable d1, (SELECT MAX(prikey) prikey myTable FROM myTable) d2 WHERE d1.prikey != d2.prikey
至少我認爲這是更有效的,如果你想不使用分析。
查詢檢索表中的所有記錄,除了第一排和最後一排
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
)
檢查這個 http://stackoverflow.com/questions/470542/how-do-i-limit -the-number-of-rows-by-oracle-query-after-ordering – Yogesh