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ế.
Kết quả 1 đến 9 của 9
  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    0

    Giúp đỡ về truy vấn

    Chào các bác, cả ngày hôm nay nghĩ mãi mà chưa ra cách truy vấn dữ liệu , các bác rành về SQL giúp em 1 cái:
    MaLD | Ngaycongtac| Bophan | ID
    001 | 1/1/2001 |01 | 1
    001 | 1/1/2004 |02 | 3
    002 | 1/3/2003 |01 | 2
    002 | 1/7/2005 |04 | 4
    .....
    Làm cách nào để truy vấn toàn bộ (group by MaLD) với điều kiện lấy bản ghi có ngày công tác gần nhất của từng người. Kết quả có dạng:
    001 | 1/1/2004 |02 | 3
    002 | 1/7/2005 |04 | 4

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Giúp đỡ về truy vấn

    SELECT ds_1.maLD, ds_1.maxngayctac, ds.phong, ds.ID
    FROM ds, [select ds.maLD, max(ngayctac) as maxngayctac from ds GROUP BY ds.maLD]. AS ds_1
    WHERE ds_1.maLD=ds.maLD and ds_1.maxngayctac = ds.ngayctac;

  3. #3
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Giúp đỡ về truy vấn

    Truy vấn là khó, trường hợp MaLD và Ngaycongtac giống nhau phải lựa chọn ID nào?
    Khả năng phải viết code.

  4. #4
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Giúp đỡ về truy vấn




    Trích dẫn Gửi bởi Access2k
    Truy vấn là khó, trường hợp MaLD và Ngaycongtac giống nhau phải lựa chọn ID nào?
    Khả năng phải viết code.
    Trong ví dụ này 2 Trường MaLD và ngaycongtac bao giờ cùng lặp lại trong table vì mỗi thời đỉêm 1 người chỉ làm việc tại một phòng ban nhất định. Có thể có nhiều MaLD và có thể có nhiều ngaycongtac trùng nhau nhưng không trùng cho 1 đối tượng.
    Trường hợp bạn nêu có thể xảy ra khi một người làm nhiều nơi cùng 1 thời điểm (cái này trong mô hình 1 doanh nghiệp thì mình chưa cần xét đến)
    Cách truy vấn của bác mượn chuẩn rồi. Chuyển từ mô hình DAO sang ADO phải thay đổi nhiều quá nhất là mấy cái hàm Dlookup,D... không còn sài được nữa, toàn phải dùng SQL để lấy dữ liệu.
    Nhân tiện em hỏi luôn câu nữa. Cái này hiện em đang phải làm qua 2 câu lệnh SQL mặc dù biết là có thể chỉ dùng câu lệnh SQL lồng là xong:
    ----------
    sql = "SELECT top 1 Mabophan FROM tbl_bophancongtac WHERE MLD='" & Me.MLD & "' order by tunam desc"
    ModADO.OpenDB
    ab = rst.Fields(0)
    sql = "UPDATE tbl_hosocanhan SET tbl_hosocanhan.Maphong = '" & ab & "' where MLD ='" & Me.MLD & "'"
    ModADO.OpenDB

  5. #5
    Ngày tham gia
    Nov 2015
    Bài viết
    4
    Ðề: Giúp đỡ về truy vấn




    Trích dẫn Gửi bởi Access2k
    Truy vấn là khó, trường hợp MaLD và Ngaycongtac giống nhau phải lựa chọn ID nào?
    Khả năng phải viết code.
    Không phải là trường hợp khác nhau mà vấn đề là ở chỗ thiết kế table đúng hay sai.
    Nếu thiết kế đúng thì sẽ phản ảnh được đối tượng theo dõi, với đầy đủ thuộc tính của nó.
    Như ví dụ trên tôi giả định là khoá chính gồm 2 field: MaLD, NgayCongtac.
    Nếu khoá chính là : phongban, MaLD, NgayCongtac thì ý nghĩa của table đã khác đi.
    Ngoài ra table này vẫn có field ID, lẽ ra nó phải là khoá chính.

    Vậy phải sử dụng cái nào là khoá? ID hay là phongban+MaLD+NgayCongtac hay MaLD+NgayCongtac ?
    Chính cấu trúc table không hướng đối tượng đã sinh ra rắc rối.

  6. #6
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Giúp đỡ về truy vấn

    Bác muon ơi tại sao câu truy vấn này của em lại không chạy được nhỉ? Mặc dù trong giáo trình nó là truy vấn hợp lệ:
    UPDATE tbl2 SET tbl2.Maphong = (select top 1 Maphong from tbl1);

  7. #7
    Ngày tham gia
    Nov 2015
    Bài viết
    5
    Ðề: Giúp đỡ về truy vấn

    Bạn cần làm 2 bước:
    1. Tạo query có tên A01 như sau:
    "SELECT Hoso.BoPhan, Max(Hoso.NgayCT) AS NgayCT FROM Hoso GROUP BY Hoso.BoPhan;"
    2. Tạo query thứ 2 có tên A02 như sau:
    "SELECT Hoso.* FROM A01 INNER JOIN Hoso ON (A01.NgayCT = Hoso.NgayCT) AND (A01.BoPhan = Hoso.BoPhan);"

    Và query A02 chính là cái bạn cần, chúc thành công!

  8. #8
    Ngày tham gia
    Nov 2015
    Bài viết
    4
    Ðề: Giúp đỡ về truy vấn




    Trích dẫn Gửi bởi dangtuanson
    Bạn cần làm 2 bước:
    1. Tạo query có tên A01 như sau:
    "SELECT Hoso.BoPhan, Max(Hoso.NgayCT) AS NgayCT FROM Hoso GROUP BY Hoso.BoPhan;"
    2. Tạo query thứ 2 có tên A02 như sau:
    "SELECT Hoso.* FROM A01 INNER JOIN Hoso ON (A01.NgayCT = Hoso.NgayCT) AND (A01.BoPhan = Hoso.BoPhan);"

    Và query A02 chính là cái bạn cần, chúc thành công!
    Hi, hi, thanks you, 2 query thì nói làm gì. Bạn xem lại câu truy vấn của bác muontennguoi, chỉ dùng 1 truy vấn thôi

  9. #9
    Ngày tham gia
    Nov 2015
    Bài viết
    3
    Ðề: Giúp đỡ về truy vấn

    2 câu hay 1 câu thì cũng đâu có gì khác nhau đâu?

    Dẫu sao ta cũng chỉ gõ vào 1 lần và save lại để chạy nhiều lần thô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
  •