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

Liên hệ QC

ndv_son

Thành viên mới
Tham gia
25/1/13
Bài viết
46
Được thích
4
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 !


 
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 :
PHP:
=LOOKUP(2,1/($A$1:$A$3=C2),$B$1:$B$3)
 

File đính kèm

  • Tim ngay.xlsx
    9.5 KB · Đọc: 60
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.
 
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.
Sorry bạn, vậy chờ thành viên biết về SQL chỉ dẫn cho bạn nha, mình bị hoa mắt rùi, hic hic hic - TRƯỢT - Nhờ SMOD xoá dùm bài viết của em nha. Thanks!!!!
 
Lần chỉnh sửa cuối:
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 !



Vậy SQL thì thế này

PHP:
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

không có CSDL như bạn nên bạn tự test đi nhé , hy vọng là giúp được bạn
 
Lần chỉnh sửa cuối:
Vậy SQL thì thế này

PHP:
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

không có CSDL như bạn nên bạn tự test đi nhé , hy vọng là giúp được bạn

Hoặc Phương án này cho chính xác hơn

PHP:
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é
 
Lần chỉnh sửa cuối:
Làm đại, trúng thì trúng mà không trúng thì trượt, chi tiết file đính kèm :
PHP:
=LOOKUP(2,1/($A$1:$A$3=C2),$B$1:$B$3)

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".
 
Lần chỉnh sửa cuối:
Thực ra cũng chẳng có gì phải thắc mắc ở đây vì giải pháp của cháu không đáp ứng đc yêu cầu chủ topic, bạn ấy muốn SQL _bài viết của cháu vô nghĩa_ cháu đã nhờ SMOD xóa dùm nhưng chưa thấy xóa??? Vì cháu không quản lý box này nên k thể xóa từ hôm qua cơ!!!

Còn về vấn đề bác đề cập thì cháu hiểu đơn giản thế này thôi : Nhật ký mua hàng hóa ngày tháng mua hàng sẽ nhập theo từng ngày mua hàng, ngày mua trước sẽ được nhập trước còn ngày mua sau sẽ nhập sau. Nghĩa là cột ngày tháng mua hàng mặc định đã được sort rồi thôi bác ạ nên cháu nghĩ khả năng của bác “có thể” không xảy ra, cháu nói là “có thể” theo tư duy của cháu chứ chưa hẳn là nó không xảy ra tất cả là do người dùng.

Phát sinh cũng có nhiều lắm bác ạ hơn nữa tác giả cũng k post file lên ví như cái dữ liệu tại cột ngày tháng là dạng text k phải date thì công thức của cháu cũng chẳng có cái tác dụng gì nữa chứ chưa nói là chạy đúng hay k đúng ý chủ topic, rồi chủ topic lại kêu ầm lên ý mà....vv...Túm lại tất cả cũng chỉ mang tính suy đoán thôi!!!!
 
Lần chỉnh sửa cuối:
Thực ra cũng chẳng có gì phải thắc mắc ở đây vì giải pháp của cháu không đáp ứng đc yêu cầu chủ topic, bạn ấy muốn SQL _bài viết của cháu vô nghĩa_ cháu đã nhờ SMOD xóa dùm nhưng chưa thấy xóa??? Vì cháu không quản lý box này nên k thể xóa từ hôm qua cơ!!!

Thì cứ để đấy đi, đâu phải thuộc dạng bài không có giá trị đâu mà xóa
Mình không xài, chủ topic không xài thì người khác xài
Ẹc... Ẹc...
(Tôi xóa được nhưng tôi cứ.. để vậy)
 
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)
 
Mình không xài, chủ topic không xài thì người khác xài

Chính xác quá.
Ta trả lời đâu phải chỉ cho chủ topic? Vì nếu thế thì gửi vào mail cho nó nhẹ diễn đàn. Đúng không?
Còn bao nhiêu người sẽ đọc. Có thể ai đó cần lọc y như thế nhưng yêu cầu là dùng công thức? Vì thế nếu ta có thể làm chuẩn công thức thì là làm cho nhiều người nữa chứ không hẳn là giúp người hỏi.
 
Rất chân thành cám ơn mọi người đã giúp đỡ nhiệt tình, cám ơn diễn đàn !
 
Web KT
Back
Top Bottom