Hai teman-teman, saya tahu ada banyak pertanyaan yang diajukan serupa dengan masalah saya, tetapi saya tidak dapat menemukan yang tepat untuk menyelesaikan masalah saya.

Saya memiliki dua tabel dalam database yang berisi id pengguna, nama, dan jika ini adalah pengguna aktif, tabel kedua berisi id dan tanggal ketika dia memposting sesuatu.

Contoh:

Db_user (id, nama, is_active)

Db_post (user_id, udate)

Saya perlu melihat semua catatan yang bukan (bukan MAX(date) ) catatan terbaru.

Saya mencoba:

SELECT name, x.user_id, x.udate FROM db_post x
LEFT JOIN deb_user y
ON x.user_id = y.id

WHERE is_active=1 AND  x.date not in (SELECT t.udate FROM
(SELECT id, MAX(udate) AS udate FROM db_post
LEFT JOIN db_user e
ON id = e.id
GROUP BY ID)t)

ORDER BY id, udate

Ini berfungsi dengan baik sampai Tanggal Maks beberapa pengguna adalah yang lain non-Maks dan tidak menampilkan semua catatan ini. Adakah ide tentang cara memperbaiki kode saya?

2
aserlix 13 Mei 2021, 14:13

1 menjawab

Jawaban Terbaik

Jika Anda ingin semua posting yang bukan yang terbaru, Anda dapat menggunakan subquery yang berkorelasi:

select p.*
from db_post p
where p.udate < (select max(p2.udate)
                 from db_post p2
                 where p2.user_id = p.user_id
                );

Berdasarkan pertanyaan Anda, saya tidak mengerti mengapa tabel db_user diperlukan. Namun, jika Anda ingin memfilter statusnya, Anda dapat bergabung dengannya.

0
Gordon Linoff 13 Mei 2021, 11:14