我想计算表中所有报价编号的报价保费总和,其中最新的交易基于trans\u id。下面的查询适用于单个报价编号,其中order by transaction\u id desc limit 1给出了最高的交易记录。
SELECT SUM(quoted_premium) FROM policy
Where quote_no= '1010'
AND trans_type IN ('quote1','new', 'quote2')
group by quote_no,Trans_id
ORDER BY Trans_id DESC LIMIT 1;
既然数据是保密的,我就给你一张样表。同一个报价单有多条记录,但没有不同的事务id。我需要获取一堆事务id与最近记录的总和。上面的查询对一个报价编号有效,但对所有报价编号的总和无效。
Trans_id quote_no trans_type quoted premium
1 1011 quote2 0
1 1010 quote2 0
2 1010 quote2 -16
2 1010 quote2 -19
2 1010 quote2 -51
2 1010 quote2 776
2 1010 quote2 0
2 1010 quote2 381
2 1010 quote2 0
2 1010 quote2 0
2 1010 quote2 59
2 1010 quote2 0
2 1010 quote2 0
2 1010 quote2 9
2 1010 quote2 194
2 1010 quote2 0
3 1010 quote2 0
3 1010 quote2 0
3 1010 quote2 1
. . . .
. . . .
. . . .
我需要把上面的记录和下面的csv文件匹配起来。csv文件中的记录总数为39731
QUOTE_NO New Quote1 Quote2 GrandSum
1009 1425 - - 1,425
1010 - 0 556 556
1111 - 0 1,332 1,332
. . . . .
. . . . .
sum 54,138,664
Avg 1363
所以,当我使用上面的查询来计算报价单编号1010的报价保费之和时,它给了我556的值。类似地,当我尝试删除quote number的条件并尝试运行查询时,它会给我一个具有最新事务记录的某个quote number的值。
我想使用子查询并进行自连接以获得正确的结果,但我无法理解。
1条答案
按热度按时间wydwbb8l1#
你需要一个只考虑最高值的结果集
Trans_id
对于每个quote_no
. 这就是你最近的意思。从子查询开始获取Trans_id
价值观。db fiddle视图接下来,您应该编写一个查询来获取
GrandSum
值,以说服自己已正确完成筛选。(你问题中的样本数据在这里没有给出一个非常有趣的结果集,因为你的
Trans_id
数值适用于钻孔记录。)最后,调整该查询以进行演示。您的演示涉及到为每一行旋转行
trans_type
因此它们显示为列。就这样结束了SUM(IF...
图案。专业提示:sql是声明性的,而不是过程性的。它是一种用于声明需要从表中获取哪些数据集的语言。因此,在设计这些东西时,请考虑集合:最新事务ID的集合,具有正确事务类型的策略行的集合,等等。