首页 >数据库 >mysql教程 >如何高效查找数据库中每种证券的最新位置?

如何高效查找数据库中每种证券的最新位置?

Patricia Arquette
Patricia Arquette原创
2025-01-05 09:10:40657浏览

How to Efficiently Find the Latest Position for Each Security in a Database?

分组最大值

目标是检索内每个唯一证券的最新头寸,由其 ID 和相应的购买日期标识。给定的数据集。

考虑下面的表位置。

</th></tr></thead>
<tbody>
<tr>
<td>id</td>
<td>security</td>
<td>buy_date</td>
</tr>
<tr>
<td>26</td>
<td>PCS</td>
<td>2012-02-08</td>
</tr>
<tr>
<td>27</td>
<td>PCS</td>
<td>2013-01-19</td>
</tr>
<tr>
<td>28</td>
<td>RDN</td>
<td>2012-04-17</td>
</tr>
<tr>
<td>29</td>
<td>RDN</td>
<td>2012-05-19</td>
</tr>
<tr>
<td>30</td>
<td>RDN</td>
<td>2012-08-18</td>
</tr>
<tr>
<td>31</td>
<td>RDN</td>
<td>2012-09-19</td>
</tr>
<tr>
<td>32</td>
<td>HK</td>
<td>2012-09-25</td>
</tr>
<tr>
<td>33</td>
<td>HK</td>
<td>2012-11-13</td>
</tr>
<tr>
<td>34</td>
<td>HK</td>
<td>2013-01-19</td>
</tr>
<tr>
<td>35</td>
<td>SGI</td>
<td>2013-01-17</td>
</tr>
<tr>
<td>36</td>
<td>SGI</td>
<td>2013-02-16</td>
</tr>
<tr>
<td>18084</td>
<td>KERX</td>
<td>2013-02-20</td>
</tr>
<tr>
<td>18249</td>
<td>KERX</td>
<td>0000-00-00</td>
</tr>
</tbody>
</table>
<p>

检索所需结果的优化查询如下:

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;

此查询避免使用子查询,这可以显着减少执行时间,特别是对于大型查询

结果是一个具有以下结构的表:

id security buy_date
27 PCS 2013-01-19
31 RDN 2012-09-19
34 HK 2013-01-19
36 SGI 2013-02-16
18084 KERX 2013-02-20

每一行代表唯一证券的最新位置,既ID 和购买日期。

以上是如何高效查找数据库中每种证券的最新位置?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn