如何在t-sql中对组中的其他项减去组中的每个项目

时间:2017-03-30 17:38:56

标签: sql sql-server tsql

我有一张每家公司的交易表。如果公司,交易日期和交易类型相同,并且一个记录的交易价格与同一公司的另一个记录,交易日期和交易类型之间的差异大于.25%,那么我需要选择两个(或者更多)记录。

我知道我需要使用group by来执行此操作,我可能需要将表连接到自身,但我很难在这里提出一种方法。我该怎么做?

Transaction_ID | Company | Transction_date | Transaction_Type | Price
1              | A       |   01/01/2017     |       BUY       |   30.01
2              |   A     |     01//01/2017  |         BUY     |       37
3              |   A     |     01/02/2017   |         BUY     |      31 

3 个答案:

答案 0 :(得分:0)

您可以使用exists

执行此操作
select t.*
from t
where exists (select 1
              from t t2
              where t2.Company = t.Company and
                    t2.Transaction_date = t.Transaction_date and
                    t2.Transaction_Type = t.Transaction_Type and
                    t2.Price not between t.Price / 1.0025 and t.Price * 1.0025;

答案 1 :(得分:0)

也许

<%= form_for resource, :as => resource_name, :url => registration_path(resource_name),:id => 'basic_form' do |f| %>

答案 2 :(得分:0)

不,您不需要使用group by来执行此操作,因为您不会谈论组,而是指定2条记录之间的条件。 正如您所说,条件是:2条记录的公司,交易日期和交易类型相同,而且价格差异为.25%(您可能需要25%,因为.25%是非常小的差异)。 您应该更准确地指定目标。你说,你想要2条或更多条记录。如您所见,您有一个答案可以从您的表中提供记录,另一个答案可以结合2条满足条件的记录。 一个可以做你所问的解决方案:

select distinct t.*
from yourtable t
where exists (
  select 1
  from yourtable t2
  where t2.Company = t.Company and
        t2.Transaction_date = t.Transaction_date and
        t2.Transaction_Type = t.Transaction_Type and
        t2.Price not between t.Price / 1.0025 and t.Price * 1.0025
)