分组最大值
问题:
从以下位置获取每个证券的最新位置表:
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 |
KERX | 2013-02-20 | |
KERX | 0000-00-00 |
解决方案:
以下查询检索每种证券的最长购买日期以及相应的 ID:
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 查找每个证券的最新位置?的详细内容。更多信息请关注PHP中文网其他相关文章!