Chào mừng đến với Diễn đàn Dân Kế Toán - Kế toán tổng hợp thực tế.
Trang 1 của 3 123 CuốiCuối
Kết quả 1 đến 10 của 21
  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    0

    Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

    Tôi có một vấn để nhờ các PRO giúp đỡ:
    Tôi có một table theo dõi mua hàng (THEODOI) của các khách hàng, gồm MSKH, HOTEN, NG_MUA, MAHANG, SOTIEN. Mỗi lần có khách hàng mua hàng là tôi lại cập nhập tiếp vào.
    Tôi muốn lọc ra lần mua hàng cuối cùng (ngày mua cuối cùng) của các khách hàng để đánh giá xem bao lâu rồi khách hàng này chưa mua hàng.
    Các PRO giúp tôi với nhé.

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

    Bạn làm cái query:

    SELECT MSKH, Max(ng_mua) AS [ngay mua cuoi cung]
    FROM tblmuahang
    GROUP BY MSKH;

  3. #3
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

    hay dung phan mem nay, ko phai suy nghi nhieu, co mọi báo cáo mà bạn cần. "metadata.com.vn/setupmda939.exe" 'minhhoan1010@yahoo.com" co j cu nhan tin nghen, tôi sẽ hỗ trợ bạn suốt quá trình sử dụng, kể cả dùng thử "0933.115.234"

  4. #4
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!




    Trích dẫn Gửi bởi muontennguoi
    Bạn làm cái query:

    SELECT MSKH, Max(ng_mua) AS [ngay mua cuoi cung]
    FROM tblmuahang
    GROUP BY MSKH;
    Nhưng chỉ lấy được tên và ngày mua cuối cùng thôi, tôi muốn lấy cả số tiền mua hàng của ngày mua cuối cùng nữa cơ.
    -----------------------------------------------------------------------------------------
    Các bác PRO thử giúp em xem ý tưởng như thế này liệu có được không:
    Quét table (tạo vòng lặp) và đặt 2 biến để so sánh: tại bản ghi thứ nhất gán biến cho MSKH và ngaymuahang; sau đó quét: nếu gặp MSKH=bien(1), so sánh nếu ngaymuahang>bien(2), gán lại biến. Khi quét hết ta sẽ lấy được MSKH với ngaymuahang (bien2) lớn nhất. Append vào một table.
    Quay lại vòng lặp. Tôi thấy phức tạp quá, chắc mình không làm được. Các PRO xem xét giúp nhé.
    Đồng thời, các PRO cho xin đoạn code quét table để lấy record có giá trị primarykey trùng với biến.

  5. #5
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

    Ý tưởng của bạn cũng sẽ cho kết quả, nhưng tốn nhiều Time lắm, nhất là khi CSDL của bạn có nhiều bản ghi. Bạn thử truy vãn sau nhé:

    SELECT THEODOI.MSKH, Last(THEODOI.HOTEN) AS HOTEN, Last(THEODOI.NG_MUA) AS NG_MUA, Last(THEODOI.MAHANG) AS MAHANG, Last(THEODOI.SOTIEN) AS SOTIEN
    FROM THEODOI INNER JOIN [SELECT THEODOI.MSKH, Max(THEODOI.NG_MUA) as NgayCuoi FROM THEODOI GROUP BY THEODOI.MSKH]. AS tblNgayCuoi ON (tblNgayCuoi .NgayCuoi = THEODOI.NG_MUA) AND (THEODOI.MSKH = tblNgayCuoi .MSKH)
    GROUP BY THEODOI.MSKH;

  6. #6
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

    Đúng là ý tưởng của tôi điên rồ thật, mới chạy có mấy trăm bản ghi mà chậm lắm.
    Tôi làm theo cách của bác DONGNAMND. Các bác thử xem giúp code này nhé:
    - Tạo tblNGAYCUOI:


    Mã:
    SELECT MaKH, Max(ngaymua) AS ngaycuoi INTO tblNGAYCUOI FROM tblTHEODOI GROUP BY MaKH
    - Tạo query lọc ra thông tin ngày mua hàng cuối cùng của các KH:


    Mã:
    SELECT tblTHEODOI.MSKH, tblTHEODOI.HOTEN, tblTHEODOI.NGAYMUA, tblTHEODOI.SOTIEN FROM tblTHEODOI INNER JOIN tblNGAYCUOI ON (tblTHEODOI.ngaymua = tblNGAYCUOI.ngaycuoi) AND (tblTHEODOI.MSKH = tblNGAYCUOI.MSKH;

  7. #7
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!




    Trích dẫn Gửi bởi haquocquan
    Đúng là ý tưởng của tôi điên rồ thật, mới chạy có mấy trăm bản ghi mà chậm lắm.
    Tôi làm theo cách của bác DONGNAMND. Các bác thử xem giúp code này nhé:
    - Tạo tblNGAYCUOI:


    Mã:
    SELECT MaKH, Max(ngaymua) AS ngaycuoi INTO tblNGAYCUOI FROM tblTHEODOI GROUP BY MaKH
    - Tạo query lọc ra thông tin ngày mua hàng cuối cùng của các KH:


    Mã:
    SELECT tblTHEODOI.MSKH, tblTHEODOI.HOTEN, tblTHEODOI.NGAYMUA, tblTHEODOI.SOTIEN FROM tblTHEODOI INNER JOIN tblNGAYCUOI ON (tblTHEODOI.ngaymua = tblNGAYCUOI.ngaycuoi) AND (tblTHEODOI.MSKH = tblNGAYCUOI.MSKH;
    Bạn làm đúng phương pháp hướng đối tượng rồi đó.
    Trong query lấy ngày cuối bạn có thể không cần INTO tblNGAYCUOI
    Thay vào đó hãy đặt tên cho query đó là tblNGAYCUOI.
    Máy chỉ lưu lại 1 dòng lệnh thay vì phải lưu lại cả 1 table nháp.

    Cắt lệnh query dài nhằng ra thành những đơn vị nhỏ sẽ có thể dùng lại cho việc khác được thuận tiện.
    Lấy ví dụ nếu như 1 khách hàng có thể mua hàng nhiều lần trong cùng 1 ngày, khi đó bạn cần 1 cái query nho nhỏ để sum số tiền mua của 1 người trong 1 ngày.
    Cái query đó có thể sẽ dùng cho nhiều báo cáo.
    Trong cái báo cáo ban đầu của bạn có thể bạn sẽ cần Inner Join nó vào tiếp.

  8. #8
    Ngày tham gia
    Dec 2015
    Bài viết
    2
    Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!




    Trích dẫn Gửi bởi muontennguoi
    Bạn làm đúng phương pháp hướng đối tượng rồi đó.
    Trong query lấy ngày cuối bạn có thể không cần INTO tblNGAYCUOI
    Thay vào đó hãy đặt tên cho query đó là tblNGAYCUOI.
    Máy chỉ lưu lại 1 dòng lệnh thay vì phải lưu lại cả 1 table nháp.

    Cắt lệnh query dài nhằng ra thành những đơn vị nhỏ sẽ có thể dùng lại cho việc khác được thuận tiện.
    Lấy ví dụ nếu như 1 khách hàng có thể mua hàng nhiều lần trong cùng 1 ngày, khi đó bạn cần 1 cái query nho nhỏ để sum số tiền mua của 1 người trong 1 ngày.
    Cái query đó có thể sẽ dùng cho nhiều báo cáo.
    Trong cái báo cáo ban đầu của bạn có thể bạn sẽ cần Inner Join nó vào tiếp.
    [SELECT THEODOI.MSKH, Max(THEODOI.NG_MUA) as NgayCuoi FROM THEODOI GROUP BY THEODOI.MSKH]. AS tblNgayCuoi

    Đoạn code này chính là query tblNGAYCUOI phải không bác. Tức là tạo một query ảo có đúng không ạ? Em tạm gọi query trên là query ảo, có cách nào tạo một query ảo độc lập không bác. Cho em xin đoạn code nhé. Em toàn phải tạo query thật để chạy thôi, trong MDB nhiều query quá.

  9. #9
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

    Chưa hiểu ý bạn về query ảo, query độc lập.

    Các query là các query, nó là 1 cách nhìn khác về các table thực trên dĩa.
    Một số phần mềm khác gọi nó là các View để phân biệt với các lệnh làm thay đổi table (như update, creat, delete ...).

  10. #10
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!




    Trích dẫn Gửi bởi haquocquan
    Đúng là ý tưởng của tôi điên rồ thật, mới chạy có mấy trăm bản ghi mà chậm lắm.
    Tôi làm theo cách của bác DONGNAMND. Các bác thử xem giúp code này nhé:
    - Tạo tblNGAYCUOI:


    Mã:
    SELECT MaKH, Max(ngaymua) AS ngaycuoi INTO tblNGAYCUOI FROM tblTHEODOI GROUP BY MaKH
    - Tạo query lọc ra thông tin ngày mua hàng cuối cùng của các KH:


    Mã:
    SELECT tblTHEODOI.MSKH, tblTHEODOI.HOTEN, tblTHEODOI.NGAYMUA, tblTHEODOI.SOTIEN FROM tblTHEODOI INNER JOIN tblNGAYCUOI ON (tblTHEODOI.ngaymua = tblNGAYCUOI.ngaycuoi) AND (tblTHEODOI.MSKH = tblNGAYCUOI.MSKH;
    Có nhất thiết thế không nhỉ?

    Một query thôi:

    SELECT mskh, hoten, ngaymua, SUM(sotien) AS tongso
    FROM tblTHEODOI
    WHERE mskh+Format("yyyymmdd",ngaymua)
    IN (SELECT mskh+ngay FROM (SELECT mskh, MAX(Format("yyyymmdd", (ngaymua)) FROM tblTHEODOI) GROUP BY mskh)
    GROUP BY mskh, hoten, ngaymua

 

 
Trang 1 của 3 123 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •