1

私はこのようなテーブルを持っています:

ID|Value
01|1
02|4
03|12
01|5
02|14
03|22
01|9
02|32
02|62
01|13
03|92

各IDが(初期値または最小値から)どの程度進歩したかを知りたい
ので、sybaseに次のように入力できます。

select ID, (value-min(value)) from table group by id;

ID|Value
01|0
01|4
01|8
01|12
02|0
02|10
02|28
02|58
03|0
03|10
03|80

ただし、monetdbこれはサポートされていません(SQL'99を使用しているのかどうかはわかりません)。
グループ化すると、1つの列のみが表示されるか、他の値の平均である可能性がありますが、望ましい結果は得られません。

でgroupbyする代わりの方法はありますmonetdbか?

4

1 に答える 1

4

これは、自己結合で実現できます。アイデアは、各 ID の最小値を与えるサブセレクトを作成し、それを ID で元のテーブルに結合するというものです。

SELECT a.id, a.value-b.min_value
FROM "table" a INNER JOIN
    (SELECT id, MIN(value) AS min_value FROM "table" GROUP BY id) AS b
    ON a.id = b.id;
于 2013-02-28T16:43:54.957 に答える