Xin chỉ cách lấy dữ liệu trùng lặp theo giá trị max của 1 cột nào đó!

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Bài viết về SQL post ở đây đúng ko các anh

Em có 1 bảng ntn:
Ten_KH so_tien ngay_mua
A 200 20/3/2012
B 400 16/10/2012
A 250 26/4/2012

Mục đích em đang muốn lấy dữ liệu xuất ra những khách hàng đã mua hàng (A,B) trong đó khách hàng nào trùng lặp thì lấy theo ngày mua lớn nhất ( ví dụ khách hàng A thì chỉ lấy theo ngày 26/4/2012 còn ngày 20/3/2012 nhỏ hơn không lấy).
SQL em toàn tự mày mò học theo tài liệu trên mạng không à nên không rành, nay gặp vụ này nghĩ mãi không ra, mọi người giúp em với nhé, em đang cần gấp quá, xin cám ơn mọi người nhiều lém !

Làm đại, trúng thì trúng mà không trúng thì trượt, chi tiết file đính kèm :
=LOOKUP(2,1/($A$1:$A$3=C2),$B$1:$B$3)

Mình đang hỏi về câu lệch trong lập trình SQL lận bạn ơi, cám ơn bạn đã giúp nhé, nhưng cái này xài ko dc.

Tôi e rằng bạn hiểu sai ý người hỏi.

Theo tôi "ví dụ khách hàng A thì chỉ lấy theo ngày 26/4/2012 còn ngày 20/3/2012 nhỏ hơn không lấy" có nghĩa là lấy ngày "xa" mốc (1-1-1900) nhất chứ không phải lấy ngày xuất hiện ở dòng có chỉ số lớn hơn, hay ngày xuất hiện "muộn nhất" trong cột.

Nếu hiểu như thế thì công thức lookup là sai. Bạn cứ thử sửa lại B1 = 2012-04-26 và B3 = 2012-03-20 thì thấy.

Tôi "e rằng" thôi chứ không dám nói là tôi hiểu đúng ý người hỏi đâu nhé. Tôi hiểu như thế vì người hỏi dùng từ "lớn hơn", "nhỏ hơn" mà ta biết là ngày tháng trong Excel chẳng qua là số tự nhiên. Vì thế nên có khái niệm "lớn, nhỏ hơn".

Vậy SQL thì thế này

SELECT Ten_KH, MAX(so_tien) as "Max so_tien", ngay_mua
FROM tbl_BanHang
GROUP BY Ten_KH;

tbl_BanHang: Tên bảng Dữ liệu của bạn
Hoặc Phương án này cho chính xác hơn

SELECT tb.Ten_KH, tb.so_tien, tb.ngay_mua
FROM tbl_banhang tb,
(SELECT Ten_KH, max(so_tien) as maxSoTien
FROM tbl_banhang
GROUP BY Ten_KH) maxKQ
WHERE tb.Ten_KH = maxKQ.Ten_KH
AND tb.so_tien= maxKQ.maxSoTien;

tbl_banhang: Tên bảng Dữ liệu của bạn
Không có CSDL như bạn nên bạn tự test đi nhé
không có CSDL như bạn nên bạn tự test đi nhé , hy vọng là giúp được bạn

Chủ thớt đưa ra cái ví dụ tối nghĩa hết sức cho nên tôi lười đoán và luời trả lời.

Hình như ADO dùng Access engine để xử lý SQL (tức là dùng phiên bản Access SQL)

Trên nguyên tắc, tìm record max có ít nhất là 4 phương pháp. Phương pháp thông dụng nhất là dùng correlated subquery. Nó không phải là phương pháp tối ưu nhưng được ưa chuộng nhất vì nó được hổ trợ trên hầu hết phiên bản của SQL.

Dùng correlated thì code của vodoi2x là gần đúng rồi.

SELECT * FROM BangTin bt
WHERE ngay_mua IN (SELECT MAX(ngay_mua) FROM BangTin WHERE ten_KH = bt.ten_KH)

www.giaiphapexcel.com/diendan/threads/xin-ch%E1%BB%89-c%C3%A1ch-l%E1%BA%A5y-d%E1%BB%AF-li%E1%BB%87u-tr%C3%B9ng-l%E1%BA%B7p-theo-gi%C3%A1-tr%E1%BB%8B-max-c%E1%BB%A7a-1-c%E1%BB%99t-n%C3%A0o-%C4%91%C3%B3.79198/

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
★★★★★ 5 ★ 1 👤 0 ▥ 0
Quảng cáo

Bạn nên đọc

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm