大家好,我正在尝试在数组中添加条件。
我想要
if policy.date_ini >= insurance.initial_date do
sum of all net_ensurance where date_ini >= initial_date
end
表
|policies|
|id| |date_ini| |num_policy|
1 2013-02-30 1234
|insurances|
|id| |policy_id| |initial_date| |net_ensurance|
1 1 2013-03-30 1000
2 1 2013-02-30 2000
3 1 2012-12-05 5000
我应该
|num_policy| |sum_net_ensurance|
1234 3000
注意: 我在数据库中的关系如下:
class Policy < ActiveRecord::Base
has_many :insurances
end
class Insurance < ActiveRecord::Base
belongs_to :policy
end
请有人可以帮助我吗?
我真的很感激帮助
答案 0 :(得分:2)
我觉得你有点困惑。您要求的是net_esureance的总和,其中保单日期是&gt; =初始日期。
首先,2013-02-30
不是有效日期。 2月只有28天。
编辑:您是否将其存储为varchar列?这是一个非常糟糕的主意。
所以,我用2013-02-28
替换了它。
接下来,你真的是指政策日期> =初始日期?如果是这样,那么每一行都是如此,所以你会回来7000.
SELECT num_policy,
sum(CASE WHEN p.date_ini >= i.initial_date
THEN ( net_ensurance) ELSE 0 END) FROM policies p
INNER JOIN insurances i ON p.id = i.policy_id
结果:
NUM_POLICY SUM_NET_ESURANCE
1234 7000
enter code here
如果你的意思相反,你会得到你期望的3000:
SELECT num_policy,
sum(CASE WHEN i.initial_date >= p.date_ini
THEN ( net_ensurance) ELSE 0 END) FROM policies p
INNER JOIN insurances i ON p.id = i.policy_id
结果:
NUM_POLICY SUM_NET_ESURANCE
1234 3000
答案 1 :(得分:0)
SELECT num_policy,CASE WHEN policy.date_ini >= insurance.initial_date
THEN SUM( net_ensurance) ELSE 0 END FROM policies p
INNER JOIN insurances i ON p.id = i.policy_id
答案 2 :(得分:0)
SELECT
p.id AS num_policy,
SUM(i.net_ensurance) AS net_ensurance
FROM policies p
INNER JOIN insurances i ON p.id = i.policy_id AND p.date_ini >= i.initial_date
GROUP BY p.id