我有一个表格,我需要根据最高参考值为每个ID返回一个不同的值。例如,这个表:
my table
|--------|----------|-------------|
| ID | Amount | Ref_value |
|---------------------------------|
| 1 | 200 | 5 |
| 1 | 120 | 8 |
| 2 | 150 | 3 |
| 3 | 200 | 4 |
|--------|----------|-------------|
我需要为每个ID获得一次返回,但由于ID = 1出现不止一次,我需要选择具有最高“Ref_value”的那个。所以我的结果是:
result of the query over my table
|--------|----------|-------------|
| ID | Amount | Ref_value |
|---------------------------------|
| 1 | 120 | 8 |
| 2 | 150 | 3 |
| 3 | 200 | 4 |
|--------|----------|-------------|
答案 0 :(得分:1)
您可以在按ID
分组的最大值上使用内部联接if (dataGridView1 == null) { return; }
答案 1 :(得分:1)
如果您的数据库支持窗口函数,此解决方案将只访问该表一次:
SELECT id, amount, ref_value
FROM (
SELECT t.*, row_number() OVER (PARTITION BY id ORDER BY ref_value DESC) rn
FROM t
) t
WHERE rn = 1
如果你正在使用Oracle,你可能会使用我发现在大多数情况下更快一点的解决方案:
SELECT
max(id) KEEP (DENSE_RANK FIRST ORDER BY ref_value DESC) id,
max(amount) KEEP (DENSE_RANK FIRST ORDER BY ref_value DESC) amount,
max(ref_value) KEEP (DENSE_RANK FIRST ORDER BY ref_value DESC) ref_value,
FROM t
GROUP BY id
如果两个ref_value
值绑定,上述两种解决方案都将返回任意行。
答案 2 :(得分:1)
选择*可能会引发不明确的列名错误。因此,您可能希望在那里选择唯一需要的列。
SELECT A.ID, A.AMOUNT, A.REF_VALUE
FROM
MYTABLE A
INNER JOIN
(SELECT ID, MAX(REF_VALUE) AS MAX_REF FROM MYTABLE GROUP BY ID) B
ON A.ID = B.ID AND A.REF_VALUE = B.MAX_REF;