我有一张表格,试图从中检索每种证券的最新头寸:
桌子:
我查询创建表: SELECT id, security, buy_date FROM positions WHERE client_id = 4
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;
SQL小提琴链接