我有一张表格,试图从中检索每种证券的最新头寸:
桌子:
我查询创建表: SELECT id, security, buy_date FROM positions WHERE client_id = 4
+-------+----------+------------+ | id | security | buy_date | +-------+----------+------------+ | 26 | PCS | 2012-02-08 | | 27 | PCS | 2013-01-19 | | 28 | RDN | 2012-04-17 | | 29 | RDN | 2012-05-19 | | 30 | RDN | 2012-08-18 | | 31 | RDN | 2012-09-19 | | 32 | HK | 2012-09-25 | | 33 | HK | 2012-11-13 | | 34 | HK | 2013-01-19 | | 35 | SGI | 2013-01-17 | | 36 | SGI | 2013-02-16 | | 18084 | KERX | 2013-02-20 | | 18249 | KERX | 0000-00-00 | +-------+----------+------------+ 我一直在弄乱基于此页面的查询版本,但似乎无法获得想要的结果。
这是我一直在尝试的方法:
SELECT t1.id, t1.security, t1.buy_date FROM positions t1 WHERE buy_date = (SELECT MAX(t2.buy_date) FROM positions t2 WHERE t1.security = t2.security) 但这只是返回我:
+-------+----------+------------+ | id | security | buy_date | +-------+----------+------------+ | 27 | PCS | 2013-01-19 | +-------+----------+------------+ 我正在尝试获取每个证券的最大/最新购买日期,因此结果将为每个证券具有最新购买日期的一行。任何帮助是极大的赞赏。
编辑:头寸的ID必须与最大购买日期一起返回。
您可以使用此查询。您可以节省75%的时间。我检查了更多数据集。子查询需要更多时间。
SELECT p1.id, p1.security, p1.buy_date FROM positions p1 left join positions p2 on p1.security = p2.security and p1.buy_date < p2.buy_date where p2.id is null;来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。