Sql Select语句查找列中的变量数据

Sql Select语句查找列中的变量数据,sql,sybase,Sql,Sybase,表名:-贸易 TradeNumber spread 1 .1 1 .1 2 .3 2 .4 我想得到所有价差不同的交易。这就是我的结果集应该只包含交易编号2 我可以构造的查询是 select TradeNumber from Trade t where t.spread <> (select t.spread from TradeNumber)

表名:-贸易

TradeNumber       spread
1                 .1
1                 .1
2                 .3
2                 .4
我想得到所有价差不同的交易。这就是我的结果集应该只包含交易编号2

我可以构造的查询是

select TradeNumber from Trade t where t.spread <> (select t.spread from TradeNumber)
没有机会运行它。是否有聚合/复合函数来解决此问题

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 (
SELECT
TradeNumber
FROM
Trade
GROUP BY TradeNumber, spread
) sq
GROUP BY TradeNumber
HAVING COUNT(*) >1

为了完整起见,另一个解决方案

SELECT TradeNumber FROM (
SELECT
TradeNumber
FROM
Trade
GROUP BY TradeNumber, spread
) sq
GROUP BY TradeNumber
HAVING COUNT(*) >1
我会和你一起去

SELECT
TradeNumber
FROM
Trade
GROUP BY TradeNumber
HAVING count(distinct spread) > 1
我会和你一起去

SELECT
TradeNumber
FROM
Trade
GROUP BY TradeNumber
HAVING count(distinct spread) > 1

最便宜的方法是:

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

与countdistinct相比,使用min和max用户的资源更少。

最便宜的方法是:

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


使用min和max用户的资源少于countdistinct。

您使用的rdbms是什么?@BlueFoots我使用的是sybase。@Arpit如果您看到的话,排列列的值为.2和.3,表示tradenumber 2,因此会有所不同,而排列列的值为.1,表示tradenumber 1,因此它没有变化。我认为DISTINCTspread是您要寻找的全部…您使用的rdbms是什么?@bluefeets我使用的是sybase@arbit如果您看到,排列列的值为.2和.3,表示贸易编号2,因此它会变化,而排列列的值为.1,表示贸易编号1,我想DISTINCTspread就是你想要的……拉斐尔·阿尔塔斯:嗨,我明天会确认接受,因为我现在没有访问数据库的权限。但是你能帮我理解内心的疑问吗?内部查询的结果集是什么?感谢链接到sqlFiddle,Raphaël,我不知道JSFIDLE有一个数据库等价:@gagansab,第二个版本可能更容易,没有子查询。解释:它检查我们是否可以找到另一行具有相同的交易号但价差不同。EXISTS是一种布尔检查。@RaphaëlAlthaus谢谢,我使用了到sql FIDLE的链接来验证相同的内容。Raphael Altaus:嗨,我明天会确认接受,因为我现在没有访问数据库的权限。但是你能帮我理解内心的疑问吗?内部查询的结果集是什么?感谢链接到sqlFiddle,Raphaël,我不知道JSFIDLE有一个数据库等价:@gagansab,第二个版本可能更容易,没有子查询。解释:它检查我们是否可以找到另一行具有相同的交易号但价差不同。EXISTS是一种布尔检查。@RaphaëlAlthaus谢谢,我使用到sql FIDLE的链接来验证相同的检查。@RaphaëlAlthaus结果是正确的。谢谢Gordon,不过我不知道如何评价绩效。@RaphaëlAlthaus结果是正确的。谢谢Gordon,不过我不知道如何评价绩效。