Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mencari Rekod Terkini untuk Setiap Kumpulan dengan Pemeriksaan Bukan Sifar dalam Pelayan SQL?

Bagaimana untuk Mencari Rekod Terkini untuk Setiap Kumpulan dengan Pemeriksaan Bukan Sifar dalam Pelayan SQL?

Barbara Streisand
Lepaskan: 2025-01-08 13:27:42
asal
499 orang telah melayarinya

How to Find the Most Recent Record for Each Group with Non-Zero Checks in SQL Server?

Mengambil Rekod Terkini dengan Cekap dengan Nilai Semak Bukan Sifar dalam Pelayan SQL

Artikel ini menunjukkan cara untuk mendapatkan semula rekod terkini untuk setiap kumpulan dalam jadual SQL Server, khususnya memfokuskan pada rekod yang nilai lajur 'semak' lebih besar daripada sifar. Mari kita pertimbangkan jadual sampel dengan struktur berikut:

<code>| GroupID | RecordDate | CashAmount | CheckAmount |
|---|---|---|---|
| 1 | 2013-01-01 | 0 | 0 |
| 2 | 2013-01-01 | 0 | 800 |
| 1 | 2013-01-03 | 0 | 700 |
| 3 | 2013-01-01 | 0 | 600 |
| 1 | 2013-01-02 | 0 | 400 |
| 3 | 2013-01-05 | 0 | 200 |</code>
Salin selepas log masuk

Matlamat kami adalah untuk mendapatkan set keputusan berikut:

<code>| GroupID | RecordDate | CheckAmount |
|---|---|---|
| 2 | 2013-01-01 | 800 |
| 1 | 2013-01-03 | 700 |
| 3 | 2013-01-05 | 200 |</code>
Salin selepas log masuk

Berikut ialah cara untuk mencapai ini menggunakan pertanyaan SQL:

Pertama, kami mengenal pasti RecordDate maksimum bagi setiap GroupID dengan CheckAmount lebih besar daripada 0:

<code class="language-sql">SELECT GroupID, MAX(RecordDate) AS MaxRecordDate
FROM YourTable
WHERE CheckAmount > 0
GROUP BY GroupID;</code>
Salin selepas log masuk

Kemudian, kami menyambungkan hasil ini kembali ke jadual asal untuk mendapatkan semula CheckAmount yang sepadan:

<code class="language-sql">SELECT yt.GroupID, yt.RecordDate, yt.CheckAmount
FROM YourTable yt
INNER JOIN (
    SELECT GroupID, MAX(RecordDate) AS MaxRecordDate
    FROM YourTable
    WHERE CheckAmount > 0
    GROUP BY GroupID
) AS MaxDates ON yt.GroupID = MaxDates.GroupID AND yt.RecordDate = MaxDates.MaxRecordDate;</code>
Salin selepas log masuk

Pertanyaan ini menapis dengan cekap amaun cek bukan sifar dan hanya memilih rekod terkini untuk setiap kumpulan. Ingat untuk menggantikan YourTable dengan nama sebenar jadual anda. Menggunakan nama lajur deskriptif (seperti GroupID dan CheckAmount) amat disyorkan untuk kebolehbacaan dan kebolehselenggaraan kod yang lebih baik.

Atas ialah kandungan terperinci Bagaimana untuk Mencari Rekod Terkini untuk Setiap Kumpulan dengan Pemeriksaan Bukan Sifar dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan