tungnht > 28-09-15, 11:55 AM
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 đỡ
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
ledangvan > 28-09-15, 03:35 PM
tungnht > 28-09-15, 03:57 PM
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
ongke0711 > 28-09-15, 10:22 PM
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;
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 ạ
...
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
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
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;
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.