Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Cekap Mencari Kedudukan Terkini untuk Setiap Keselamatan dalam Pangkalan Data?

Bagaimana untuk Cekap Mencari Kedudukan Terkini untuk Setiap Keselamatan dalam Pangkalan Data?

Patricia Arquette
Patricia Arquetteasal
2025-01-05 09:10:40650semak imbas

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

Maksimum Mengikut Kumpulan

Objektifnya adalah untuk mendapatkan semula kedudukan terkini, yang dikenal pasti melalui IDnya dan tarikh pembelian yang sepadan, untuk setiap keselamatan unik dalam set data yang diberikan.

Pertimbangkan kedudukan jadual berikut.

</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>

Pertanyaan yang dioptimumkan yang mendapatkan semula hasil yang diingini adalah seperti berikut:

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;

Pertanyaan ini mengelakkan penggunaan sub-pertanyaan, yang boleh mengurangkan masa pelaksanaan dengan ketara, terutamanya untuk set data yang besar.

Hasilnya ialah jadual dengan struktur berikut:

</th></tr></thead>
<tbody>
<tr>
<td>id</td>
<td>security</td>
<td>buy_date</td>
</tr>
<tr>
<td>27</td>
<td>PCS</td>
<td>2013-01-19</td>
</tr>
<tr>
<td>31</td>
<td>RDN</td>
<td>2012-09-19</td>
</tr>
<tr>
<td>34</td>
<td>HK</td>
<td>2013-01-19</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>
</tbody>
</table>
<p>

Setiap baris mewakili kedudukan terkini untuk keselamatan yang unik , dari segi ID dan tarikh pembelian.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari Kedudukan Terkini untuk Setiap Keselamatan dalam Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn