3

次の列を持つテーブルがあります

table: route
columns: id, location, order_id

そしてそれは次のような値を持っています

id, location, order_id
1, London, 12
2, Amsterdam, 102
3, Berlin, 90
5, Paris, 19

次に高いorder_idを持つIDとともに各行を返すpostgresでsql selectステートメントを実行することは可能ですか? だから私は何かが欲しい...

id, location, order_id, next_id
1, London, 12, 5
2, Amsterdam, 102, NULL
3, Berlin, 90, 2
5, Paris, 19, 3

ありがとう

4

3 に答える 3

6
select 
  id, 
  location, 
  order_id,
  lag(id) over (order by order_id desc) as next_id
from your_table
于 2012-04-27T10:31:52.023 に答える
1

最初にテストベッドを作成します:

CREATE TABLE route (id int4, location varchar(20), order_id int4);
INSERT INTO route VALUES
    (1,'London',12),(2,'Amsterdam',102),
    (3,'Berlin',90),(5,'Paris',19);

クエリ:

WITH ranked AS (
    SELECT id,location,order_id,rank() OVER (ORDER BY order_id)
      FROM route)
SELECT b.id, b.location, b.order_id, n.id
  FROM ranked b
  LEFT JOIN ranked n ON b.rank+1=n.rank
  ORDER BY b.id;

ウィンドウ関数の詳細については、ドキュメントを参照してください。

于 2012-04-27T10:32:32.813 に答える
0

はい:

select * ,
(select top 1 id from routes_table where order_id > main.order_id order by 1 desc)
from routes_table main
于 2012-04-27T10:34:47.593 に答える