-
Tính giá thời điểm trước đó
tungnht > 28-09-15, 11:55 AM
Em có 1 bảng như sau
Field 1: Ngày Định dạng: Date/Time
Field 2: Giá quốc tế Định dạng: Number
Field 3: Giá nội địa Định dạng: Number
Em muốn tại một query báo cáo
Ngày Giá qte Gia nội địa Giá qte (của record trước đó) Giá nội địa (của record trước đó)
Vấn đề là em ko biết phải dùng ntn để lấy được số liệu của record liền trước
Mong các cao thủ giúp đỡ -
RE: Nhờ các cao thủ chỉ giáo
ledangvan > 28-09-15, 12:11 PM
(28-09-15, 11:55 AM)tungnht Đã viết: Em có 1 bảng như sau
Field 1: Ngày Định dạng: Date/Time
Field 2: Giá quốc tế Định dạng: Number
Field 3: Giá nội địa Định dạng: Number
Em muốn tại một query báo cáo
Ngày Giá qte Gia nội địa Giá qte (của record trước đó) Giá nội địa (của record trước đó)
Vấn đề là em ko biết phải dùng ntn để lấy được số liệu của record liền trước
Mong các cao thủ giúp đỡ
Bạn phải định nghĩa giá trước đó là ngày nào (Giá trước một ngày hay trước một tuần, hay ...) để có cơ sở tính, Khi đã có định nghĩa đó thì tách ra 2 querry : Một là tính giá đến thời điểm hiện tại, hai là tính đến thời điểm trước đó ...
Sau đó gộp 2 query lại là được -
RE: Nhờ các cao thủ chỉ giáo
tungnht > 28-09-15, 03:09 PM
(28-09-15, 12:11 PM)ledangvan Đã viết:
(28-09-15, 11:55 AM)tungnht Đã viết: Em có 1 bảng như sau
Field 1: Ngày Định dạng: Date/Time
Field 2: Giá quốc tế Định dạng: Number
Field 3: Giá nội địa Định dạng: Number
Em muốn tại một query báo cáo
Ngày Giá qte Gia nội địa Giá qte (của record trước đó) Giá nội địa (của record trước đó)
Vấn đề là em ko biết phải dùng ntn để lấy được số liệu của record liền trước
Mong các cao thủ giúp đỡ
Bạn phải định nghĩa giá trước đó là ngày nào (Giá trước một ngày hay trước một tuần, hay ...) để có cơ sở tính, Khi đã có định nghĩa đó thì tách ra 2 querry : Một là tính giá đến thời điểm hiện tại, hai là tính đến thời điểm trước đó ...
Sau đó gộp 2 query lại là được
Filed 1: VD như là trước 1 ngày đi ạ. Thì câu lệnh là ntn ạ? -
RE: Nhờ các cao thủ chỉ giáo
ledangvan > 28-09-15, 03:35 PM
Bạn phải định nghĩa giá trước đó là ngày nào (Giá trước một ngày hay trước một tuần, hay ...) để có cơ sở tính, Khi đã có định nghĩa đó thì tách ra 2 querry : Một là tính giá đến thời điểm hiện tại, hai là tính đến thời điểm trước đó ...
Sau đó gộp 2 query lại là được
[/quote]
Filed 1: VD như là trước 1 ngày đi ạ. Thì câu lệnh là ntn ạ?
[/quote]
Hì, nó quá đơn giản, của bạn đây : http://www.mediafire.com/download/n3fd84...r/Vidu.mdb -
RE: Tính giá thời điểm trước đó
tungnht > 28-09-15, 03:57 PM
Cảm ơn cao thủ đã chỉ giáo. Có điều có cách nào giải quyết trong 1 query mà nó tự động lấy ngày trước đó ko ạ
E đã thử làm Query bằng SQL nhưng vẫn ko được -
RE: Tính giá thời điểm trước đó
ledangvan > 28-09-15, 07:38 PM
(28-09-15, 03:57 PM)tungnht Đã viết: Cảm ơn cao thủ đã chỉ giáo. Có điều có cách nào giải quyết trong 1 query mà nó tự động lấy ngày trước đó ko ạ
E đã thử làm Query bằng SQL nhưng vẫn ko được
Bạn vẫn phải có qr tính giá của ngày hiện tại, ở ví dụ này tôi bớt đi 1 qr
Ví dụ tôi đã chỉnh, xem đã ưng chưa nhéhttp://www.mediafire.com/download/n3fd84...r/Vidu.mdb
-
RE: Tính giá thời điểm trước đó
ongke0711 > 28-09-15, 10:22 PM
Bạn copy câu SQL này vào Query để lấy giá cũ 1 dòng trước đó xem có đúng ý đồ tác giả không nhé.
Mã PHP:SELECT Giave.Ngay, Giave.GiaQT, Giave.GiaND,
(SELECT TOP 1 Prev.GiaQT FROM Giave AS Prev
WHERE (Prev.Ngay < Giave.Ngay)
ORDER BY Prev.Ngay DESC) AS GiaQTCu,
(SELECT TOP 1 Prev.GiaND FROM Giave AS Prev
WHERE (Prev.Ngay < Giave.Ngay)
ORDER BY Prev.Ngay DESC) AS GiaNDCu
FROM Giave;
-
RE: Tính giá thời điểm trước đó
tranthanhan1962 > 28-09-15, 10:56 PM
(28-09-15, 11:55 AM)tungnht Đã viết: ...
Vấn đề là em ko biết phải dùng ntn để lấy được số liệu của record liền trước
...
(28-09-15, 03:57 PM)tungnht Đã viết: ... mà nó tự động lấy ngày trước đó ko ạ
...
Lúc đầu bạn hỏi là “số liệu của record liền trước”. Mình cũng hơi ngờ ngợ, chưa dám trả lời ngay (với lại mình cũng lười tạo cơ sở dữ liệu lắm). Nhưng sau khi bạn ledangvan trả lời thì bạn xác định là “nó tự động lấy ngày trước”. Hai cái này khác nhau lắm lắm…
1/Nếu là “số liệu của record liền trước” thì có thể nó cùng ngày, trước đó 1 ngày hoặc nhiều ngày (trường hợp trước đó nhiều ngày không có phát sinh)
2/ Nếu là “nó tự động lấy ngày trước” thì nó sẽ bỏ qua số liệu của ngày hiện tại, nhưng nếu ngày liền trước nó có nhiều record với nhiều giá khác nhau thì nó sẽ lấy record nào? (lớn nhất? nhỏ nhất? trung bình? đầu ngày? cuối ngày?).
Xin phép mượn tạm ví dụ của bạn ledangvan tạo thêm trên form chonngay 3 textbox: NgayTruoc, GiaQT, GiaND
Tạm thời tôi giải quyết cho bạn 2 trường hợp. (Không cần tạo query)
1/ Lấy giá trị của record liền trước.
Mã:Private Sub Command0_Click()
Dim CSDL As Database
Dim BangGia As Recordset
Set CSDL = CurrentDb
Set BangGia = CSDL.OpenRecordset("Giave", DB_OPEN_DYNASET)
BangGia.MoveLast
BangGia.MovePrevious
NgayTruoc.Value = BangGia![Ngay]
GiaQT.Value = BangGia![GiaQT]
GiaND.Value = BangGia![GiaND]
End Sub
2/Lấy giá trị record cuối cùng của ngày liền trước có phát sinh.
Mã:Private Sub Command0_Click()
Dim CSDL As Database
Dim BangGia As Recordset
Set CSDL = CurrentDb
Set BangGia = CSDL.OpenRecordset("Giave", DB_OPEN_DYNASET)
BangGia.MoveLast
Do While Not BangGia.EOF
If BangGia![Ngay] >= Ngayhientai.Value Then
BangGia.MovePrevious
Else
NgayTruoc.Value = BangGia![Ngay]
GiaQT.Value = BangGia![GiaQT]
GiaND.Value = BangGia![GiaND]
Exit Do
End If
Loop
BangGia.Close
End Sub
Khi có giá trị các textbox cần thiết tạo report có các textbox có control source = value của các textbox tương ứng trên form là xong.
Các trường hợp khác khá phức tạp bạn có thể gởi database lên tùy theo trường hợp sẽ xử lý. Thực ra nếu các bạn cần trợ giúp nên tạo CSDL sẳn anh em dễ dàng hỗ trợ hơn. Bởi vì thật khó khăn khi trả lời những câu hỏi chung chung. Nhiều khi không hiểu ý thành ra hỏi một đường trả lời một nẻo.
Thân -
RE: Tính giá thời điểm trước đó
thucgia > 29-09-15, 09:55 PM
(28-09-15, 10:22 PM)ongke0711 Đã viết: Bạn copy câu SQL này vào Query để lấy giá cũ 1 dòng trước đó xem có đúng ý đồ tác giả không nhé.
Mã PHP:SELECT Giave.Ngay, Giave.GiaQT, Giave.GiaND,
(SELECT TOP 1 Prev.GiaQT FROM Giave AS Prev
WHERE (Prev.Ngay < Giave.Ngay)
ORDER BY Prev.Ngay DESC) AS GiaQTCu,
(SELECT TOP 1 Prev.GiaND FROM Giave AS Prev
WHERE (Prev.Ngay < Giave.Ngay)
ORDER BY Prev.Ngay DESC) AS GiaNDCu
FROM Giave;
Cám ơn bạn, Quá dữ luôn. hix xuất hai chiêu liên tiếp .... Prev... trên cả tuyệt vời. -
RE: Tính giá thời điểm trước đó
thucgia > 30-09-15, 11:52 PM
(29-09-15, 09:55 PM)thucgia Đã viết:
(28-09-15, 10:22 PM)ongke0711 Đã viết: Bạn copy câu SQL này vào Query để lấy giá cũ 1 dòng trước đó xem có đúng ý đồ tác giả không nhé.
Mã PHP:SELECT Giave.Ngay, Giave.GiaQT, Giave.GiaND,
(SELECT TOP 1 Prev.GiaQT FROM Giave AS Prev
WHERE (Prev.Ngay < Giave.Ngay)
ORDER BY Prev.Ngay DESC) AS GiaQTCu,
(SELECT TOP 1 Prev.GiaND FROM Giave AS Prev
WHERE (Prev.Ngay < Giave.Ngay)
ORDER BY Prev.Ngay DESC) AS GiaNDCu
FROM Giave;
Cám ơn bạn, Quá dữ luôn. hix xuất hai chiêu liên tiếp .... Prev... trên cả tuyệt vời.
id hang_id N X
1 a 2 0
2 a 0 1
3 a 1 1
select id,hang_id,
(
SELECT Nz(sum(n)-sum(x),0)
FROM nx as prev
WHERE (((prev.id) < nx.id))
GROUP BY nx.hang_id;
)
as td,
n,x,
td+n-x as tc
from nx
id hang_id td n x tc
1 a 2 0
2 a 2 0 1 1
3 a 1 1 1 1
Hix giúp mình tí, làm sao khỏi bị null cái dòng đầu với!!!