1

テーブル名:-トレード

TradeNumber       spread
1                 .1
1                 .1
2                 .3
2                 .4

スプレッドが変化するすべての取引を取得したいと思います。つまり、私の結果セットには取引番号2のみが含まれている必要があります。

私が構築できるクエリは

select TradeNumber from Trade t where t.spread <> (select t.spread from TradeNumber)

それを実行する機会がありませんでした。それを解決するための集約/複合関数はありますか?

4

4 に答える 4

4
SELECT DISTINCT t.TradeNumber
FROM Trade t
WHERE EXISTS (SELECT NULL
                  FROM Trade t1
                  WHERE t.TradeNumber = t1.tradeNumber
                  AND t.spread <> t1.spread)

また

select TradeNumber
FROM Trade
GROUP BY TradeNumber
HAVING COUNT(DISTINCT spread) > 1

sqlFiddle

于 2013-01-24T14:13:11.320 に答える
2

これを行うための最も安価な方法は次のとおりです。

select tradenumber
from t
group by tradenumber
having min(spread) <> max(spread)

を使用しminmaxユーザーがより少ないリソースを使用しますcount(distinct)

于 2013-01-24T14:25:33.120 に答える
1

完全を期すために、別の解決策。

SELECT TradeNumber FROM (
SELECT
TradeNumber
FROM
Trade
GROUP BY TradeNumber, spread
) sq
GROUP BY TradeNumber
HAVING COUNT(*) >1
于 2013-01-24T14:13:58.983 に答える
1

私は一緒に行きます

SELECT
TradeNumber
FROM
Trade
GROUP BY TradeNumber
HAVING count(distinct spread) > 1
于 2013-01-24T14:21:24.360 に答える