09/10/2018, 23:17

Lay 5 Invoice gan nhat cho tung Khach hang. Help???

Lay 5 Invoice gan nhat cho tung Khach hang. Help???

--------------------------------------------------------------------------------

Toi co 2 tablle:
- Customer(CustID,CustName,Address)
- Invoice(CustID,InvoiceID,InvoiceDate)
=> cho toi hoi Cau query the nao de lay duoc danh sach 5 invoices gan nhat (tinh theo InvoiceDate) cua tung Khach hang mot (chu y: khong phai 5 invoice gan nhat tren table Invoice)
DarkminD viết 01:23 ngày 10/10/2018
Giả sử đã có $CustID = CustID của khách
select InvoiceID from Invoice where CustID=$CustID order by InvoiceDate Desc limit 0,5
thanhphong122 viết 01:20 ngày 10/10/2018
Quote Được gửi bởi DarkminD View Post
Giả sử đã có $CustID = CustID của khách
select InvoiceID from Invoice where CustID=$CustID order by InvoiceDate Desc limit 0,5
$CustID = CustID ???

Desc limit 0,5 ???

Ban oi, toi chua hieu duoc cach lam cua ban. Ban giai thich ro hon dum, thanks so much!
ngonchan viết 01:19 ngày 10/10/2018
Code:
select InvoiceID from Invoice where Customer.CustID = Invoice.CustID order by InvoiceDate Desc limit 0,5
Câu truy vấn của DarkminD là lấy invoice của khách hàng có ID là CustID còn cái dưới này là lấy 5 invoice gần nhất của 5 khách hàng, xài cái nào là tùy trường hợp muh sử dụng thui.
thanhphong122 viết 01:25 ngày 10/10/2018
Quote Được gửi bởi ngonchan View Post
Code:
select InvoiceID from Invoice where Customer.CustID = Invoice.CustID order by InvoiceDate Desc limit 0,5
Câu truy vấn của DarkminD là lấy invoice của khách hàng có ID là CustID còn cái dưới này là lấy 5 invoice gần nhất của 5 khách hàng, xài cái nào là tùy trường hợp muh sử dụng thui.
select InvoiceID from Invoice where Customer.CustID = Invoice.CustID order by InvoiceDate Desc limit 0,5
=> query của bạn thiếu mất bảng Customer đúng không?
select InvoiceID from Invoice,Customer
where Customer.CustID = Invoice.CustID order by InvoiceDate Desc limit 0,5
Còn "limit 0,5" là gì? Bạn giải thích giúp tôi ý nghĩa của nó? Nó là từ khóa trong SQL ư?
thienhavotac viết 01:33 ngày 10/10/2018
select orderID,OrderDate from orders where CustomerID='HANAR' order by OrderDate desc
select top 5 orderID from orders where CustomerID='HANAR' order by OrderDate desc
------------------------------------------------------------------
Bạn thử 2 câu query này trên CSDL Northwind sẽ thấy ngay
Còn cái limit 0,5 của bác Darkmind đúng là em mới thấy lần đầu, hình như nó kô phải là từ khóa trong SQL 2000
ngonchan viết 01:20 ngày 10/10/2018
Hmm, sorry, cái limit 0,5 là của MySQL, nhiễm rùi.
DarkminD viết 01:34 ngày 10/10/2018
Oái, tớ cứ tưởng cậu ý dùng mySQL. !
totillas viết 01:26 ngày 10/10/2018
Các câu lệnh trên đều sai y/c.

select InvoiceID from Invoice where CustID=$CustID order by InvoiceDate Desc limit 0,5
Câu lệnh trên lấy ra 5 hóa đơn mới nhất của khách hàng cho trước (chỉ một khách hàng duy nhất).

select InvoiceID from Invoice where CustID=$CustID order by InvoiceDate Desc limit 0,5
Câu lệnh trên thiếu bảng Customer. Trong trường hợp thêm bảng vào cho đúng thì câu lệnh cũng chỉ lấy ra 5 hóa đơn mới nhất của bảng Invoice (không phải 5 hóa đơn mới nhất của từng khách hàng).

select orderID,OrderDate from orders where CustomerID='HANAR' order by OrderDate desc
select top 5 orderID from orders where CustomerID='HANAR' order by OrderDate desc
Không hiểu 2 lệnh trênlàm gì.

Để lấy ra 5 hóa đơn mới nhất của mỗi khách hàng, câu lệnh sẽ là:

SELECT c.CustID, c.CustName, i.InvoiceDate FROM Customer c, Invoice i
WHERE (c.CustID = i.CustID) AND (i.InvoiceID IN (SELECT TOP 2 InvoiceID FROM Invoice j WHERE (c.CustID = j.CustID) ORDER BY j.InvoiceDate DESC))
ORDER BY c.CustID, i.InvoiceDate DESC


Câu lệnh trên sử dụng cho MS SQL Server. Nếu Oracle thì có thể sử dụng ROWNUM thay cho TOP và chuyển ROWNUM vào WHERE
thanhphong122 viết 01:33 ngày 10/10/2018
Ok, cam on ban rat nhieu.
Bài liên quan
0