-1

我正在尝试将条件放入数组中。

我想

   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
4

3 回答 3

2

我觉得你有点困惑。您要求保单日期 >= 初始日期的 net_esureance 总和。

首先,2013-02-30不是一个有效的日期。二月只有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

SQLFiddle

于 2013-11-06T18:10:33.703 回答
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
于 2013-11-06T17:39:16.990 回答
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
于 2013-11-06T17:41:18.283 回答