我有一张每家公司的交易表。如果公司,交易日期和交易类型相同,并且一个记录的交易价格与同一公司的另一个记录,交易日期和交易类型之间的差异大于.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
答案 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
)