选择Oracle SQL中除了最后一行之外的所有行

EGN*_*EGN 1 sql oracle

我想拉除Oracle SQL中除最后一行之外的所有行

我的数据库是这样的

Prikey - Auto_increment
common - varchar
miles - int
Run Code Online (Sandbox Code Playgroud)

所以我想总结除了按公钥分组的主键排序的最后一行之外的所有行.这意味着对于每个不同的共同点,里程将被加总(除了最后一个)

Ed *_*bbs 5

注意:此答案发布后问题已更改.前两个查询适用于原始问题.最后一个查询(在附录中)适用于更新的问题.

这应该可以解决问题,尽管对于较大的表来说它会有点慢:

SELECT prikey, authnum FROM myTable
WHERE prikey <> (SELECT MAX(prikey) FROM myTable)
ORDER BY prikey
Run Code Online (Sandbox Code Playgroud)

此查询更长,但对于大型表,它应该更快.我会留给你决定:

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

附录有一个更新的问题; 这是更新的答案.

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
Run Code Online (Sandbox Code Playgroud)