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不支持这个(我不确定可能是cz它使用了SQL'99)。
Group by 只给出一列,或者可能是其他值的平均值,但不是所需的结果。

group by in 有什么替代方法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 回答