1

次のデータセットがあります

ID  P   C1    C2    XR  
1   1   GBP   USD   1.6
2   2   GBP   USD   1.7
3   1   GBP   EUR   0.84
4   2   GBP   EUR   0.83
5   1   GBP   CHF   1.8
6   2   GBP   CHF   1.8

結果は次のようになるはずなので、各ペアの最小XRを取得しようとしています

ID  P   C1    C2    XR  
1   1   GBP   USD   1.6
4   2   GBP   EUR   0.83
5   1   GBP   CHF   1.8

しかし、私SELECT MIN(XR) GROUP BY C1,C2が正しいIDを取得しないか、「ONLY_FULL_GROUP_BY」が有効になっている場合、IDがGROUP BYにないという警告が表示されます

私が持っている最も近いものはこれです:

SELECT t1.id, t1.C1, t1.C2, MIN(t2.XR) FROM xrates t1 
LEFT JOIN xrates AS t2 ON t1.id = t2.id
GROUP BY t1.id, t1.C1, t1.C2
HAVING t1.C1 = 'GBP' AND t1.C2 IN ('USD','EUR')
4

3 に答える 3

2
select rates.*
from xrates rates
where id in 
(
    select min(xrates.id) as minid    
    from xrates
    inner join
    (
        select C1, C2, MIN(XR) as minxr
        from xrates
        GROUP BY C1, C2
        HAVING C1 = 'GBP'
    ) x on x.c1 = xrates.c1 and x.c2 = xrates.c2 and x.minxr = xrates.xr
    group by xrates.C1, xrates.C2
)

SQLFiddle デモ

于 2013-11-13T08:28:48.050 に答える
0
SELECT x.*
  FROM my_table x
  JOIN 
    (SELECT grouping _id,MIN(ordering_id) min_ordering_id FROM my_table GROUP BY grouping_id) y
  ON y.grouping_id = x.grouping_id 
   AND y.min_ordering_id = x.ordering_id;

(「grouping_id」は複数の列で形成される場合があることに注意してください!)

于 2013-11-13T08:33:21.107 に答える
-1

テーブルをそれ自体に結合する必要はなく、ID で GROUP BY したくないか、すべての行が一意になります。以下は、指定した結果を返す必要があります。

SELECT 
    xrates.id, 
    xrates.C1, 
    xrates.C2, 
    MIN(xrates.XR) 
FROM xrates 
WHERE xrates.C1 = 'GBP' 
AND xrates.C2 IN ('USD','EUR')
GROUP BY 
    xrates.C1, 
    xrates.C2;
于 2013-11-13T08:33:00.323 に答える