Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Tính giá thời điểm trước đó
#1
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 đỡ
Chữ ký của tungnht tungnht,gia nhập Thủ Thuật Access từ 28-09 -15.
Reply
Những người đã cảm ơn
#2
(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
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
(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 ạ?
Chữ ký của tungnht tungnht,gia nhập Thủ Thuật Access từ 28-09 -15.
Reply
Những người đã cảm ơn
#4
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
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , peid210985
#5
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
Chữ ký của tungnht tungnht,gia nhập Thủ Thuật Access từ 28-09 -15.
Reply
Những người đã cảm ơn
#6
(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é  014 http://www.mediafire.com/download/n3fd84...r/Vidu.mdb
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#7
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.NgayGiave.GiaQTGiave.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


[Hình: LayGiaOld.png]
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn ledangvan , tranthanhan1962 , Noname , peid210985
#8
(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) 015  . 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…  007
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
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , maidinhdan , peid210985 , thucgia
#9
(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.NgayGiave.GiaQTGiave.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


[Hình: LayGiaOld.png]

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.
Chữ ký của thucgia Hix, Access quả nhiên lợi hại !!!! http://vibigaba.esy.es/
ღღღღღTài sản của thucgia (View All Items) ღღღღღ
Reply
Những người đã cảm ơn ongke0711
#10
(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.NgayGiave.GiaQTGiave.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


[Hình: LayGiaOld.png]

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!!!
Chữ ký của thucgia Hix, Access quả nhiên lợi hại !!!! http://vibigaba.esy.es/
ღღღღღTài sản của thucgia (View All Items) ღღღღღ
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
Question [Help] Cần giúp đỡ tạo query lấy giá trị của dòng liền trước để tính giá trị trung bình luonguct 4 89 23-11-16, 12:33 AM
Bài mới nhất: luonguct
  [Hỏi] Tính số ngày công tác trangdv.pchg 25 581 13-11-16, 01:20 PM
Bài mới nhất: ongke0711
  Điền Mr hoặc Ms theo giới tính huuduy.duy 8 489 04-11-16, 05:58 PM
Bài mới nhất: huuduy.duy
  [Help] Tìm ngày tính lương ducanh.ktnb 18 549 15-10-16, 06:45 PM
Bài mới nhất: ongke0711
  Hướng Dẫn Cách tạo Query để cập nhật lại thời gian trong table. ngokimhang33 9 379 28-09-16, 10:36 AM
Bài mới nhất: lamvankhanh

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ