Yêu cầu thg 5 14, 8:39 SA 289 0 5
  • 289 0 5
0

SQL, Join chỉ lấy một dòng dữ liệu

Chia sẻ
  • 289 0 5

image.png

Xin chào!

  • mình có 2 bảng dữ liệu tb_1, tb_2
  • tb_2 cùng 1 pnlbarcode có 2 dòng dữ liệu khác nhau
  • mình muốn hỏi cách JOIN tb_1 với tb_2 bằng pnl barcode, nhưng chỉ lấy 1 dòng dữ liệu có scan_dt lớn hơn ở tb_2
thg 5 17, 2:17 SA

5 CÂU TRẢ LỜI


Đã trả lời thg 5 14, 9:03 SA
+1

Như thế này được ko nhỉ :v image.png

Chia sẻ
Avatar Win @D7new
thg 5 14, 9:34 SA

Cảm ơn bạn ... để mình thử,,, với xem phương án nào hiệu năng cao hơn

Avatar Win @D7new
thg 5 14, 11:08 SA

image.png Code này dùng được với db nhỏ, nhưng với db lớn không biết có tối ưu không

Avatar Win @D7new
thg 5 15, 2:12 SA

image.png

mình thấy có vấn đề là, nếu có nhiều dòng cùng scan_dt, thì sẽ JOIN tất cả. bài toán yêu cầu JOIN 1 dòng, và scan_dt lớn nhất 😦(

Đã trả lời thg 5 14, 9:09 SA
+1

bạn thử nha

SELECT
	tb_1.*,
	tb_2.*
FROM tb_1
LEFT JOIN (
				SELECT pnlbarcode, MAX(scan_dt) AS max_scan_dt
				FROM tb_2
				GROUP BY pnlbarcode
				) AS latest_tb_2
ON tb_1.pnlbarcode = latest_tb_2.pnlbarcode
LEFT JOIN tb_2 ON	tb_2.pnlbarcode		= latest_tb_2.pnlbarcode 
						 AND tb_2.scan_dt			= latest_tb_2.max_scan_dt

Oke thì cho mình xin 1 upvote 1 bookmark ở bài viết mới nhất nha. Thanks.

Chia sẻ
Avatar Win @D7new
thg 5 14, 9:34 SA

Cảm ơn bạn ... để mình thử,,, với xem phương án nào hiệu năng cao hơn

Đã trả lời thg 5 21, 9:33 SA
0

SELECT tb_1., tb_2. FROM tb_1 JOIN ( SELECT tb_2.* FROM tb_2 JOIN ( SELECT PNL_Barcode, MAX(scan_dt) AS max_scan_dt FROM tb_2 GROUP BY PNL_Barcode ) AS latest ON tb_2.PNL_Barcode = latest.PNL_Barcode AND tb_2.scan_dt = latest.max_scan_dt ) AS filtered_tb_2 ON tb_1.PNL_Barcode = filtered_tb_2.PNL_Barcode Bạn có thể thử

Chia sẻ
thg 5 25, 5:12 SA

Nếu SQL Server thì bạn dùng CTE cho đơn giản nhé 👍️

; WITH cte AS ( SELECT a.*, RN = ROW_NUMBER() OVER (PARTITION BY a.barcode ORDER BY a.scan_dt DESC) FROM @tb2 a LEFT JOIN @tb1 b on a.barcode = b.barcode ) SELECT * FROM cte WHERE RN = 1;

Đã trả lời thg 5 29, 10:23 SA
0

sắp xếp xong lấy top là là có dòng theo yêu cầu có đúng không

Chia sẻ
Đã trả lời thg 10 3, 9:40 SA
0

Cái đống comment bên dưới toàn các thánh viết sql 😆 , vấn đề này có thể giải quyết 1 cách đơn giản , mà sao cứ phải join , max, min làm cái méo gì :

SELECT TOP 1 * FROM ( SELECT T1.* ,T2.* FROM T1, T2 WHERE T1.PN=T2.PN ORDER BY T2.SCAN_DATE DESC )

Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí