Giúp đỡ về truy vấn

behattieu

Member
Hội viên mới
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
 
Ðề: 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;
 
Sửa lần cuối:
Ðề: 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.
 
Sửa lần cuối:
Ðề: 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.
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
 
Sửa lần cuối:
Ðề: 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.

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.
 
Ðề: 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);
 
Ðề: 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!
 
Ðề: 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!

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
 
Ðề: 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.
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top