Lọc dữ liệu của 3 tháng trước

Người dùng sẽ select tháng và năm.
Như trong đoạn code dưới em có lọc ra 3 tháng trước ạ.
Trường hợp người dùng chọn tháng 2-2020 thì làm thế nào để lọc được ra 3 tháng trước đó là tháng 11-2019, 12-2019, 01-2020 ạ.

Em cảm ơn mọi người đã giúp đỡ.

create Proc [dbo].[testReport3]
(
@para int,
@year int
)
AS
BEGIN
SELECT  cave1.Quantity_M1, cave2.Quantity_M2, cave3.Quantity_M3 , v.* , 

(select ((coalesce(cave1.Quantity_M1,0) + coalesce(cave2.Quantity_M2,0) + coalesce(cave3.Quantity_M3,0))/3) as tb ) as Average

FROM tblMasterListStationery v 
LEFT JOIN (SELECT ItemMasterNo,SUM(Quantity) as Quantity_M1 FROM tblOutput WHERE MONTH(OutputDate)=@para-3 and YEAR(OutputDate)=@year group by ItemMasterNo) AS cave1  
ON v.ItemMasterNo=cave1.ItemMasterNo
LEFT JOIN (SELECT ItemMasterNo,SUM(Quantity) as Quantity_M2 FROM tblOutput WHERE MONTH(OutputDate)=@para-2 and YEAR(OutputDate)=@year group by ItemMasterNo) cave2
ON v.ItemMasterNo=cave2.ItemMasterNo 
LEFT JOIN (SELECT ItemMasterNo, SUM(quantity) as Quantity_M3 FROM tblOutput WHERE MONTH(OutputDate)=@para-1 and YEAR(OutputDate)=@year GROUP BY ItemMasterNo) cave3
ON v.ItemMasterNo=cave3.ItemMasterNo
where v.ItemMasterNo = cave1.ItemMasterNo or  v.ItemMasterNo = cave2.ItemMasterNo or  v.ItemMasterNo = cave3.ItemMasterNo
END

M thường xử lý ngày tháng bắt đầu và kết thúc ở back-end/front-end rồi sài select between để lấy kết quả từ db, đừng cái gì cũng nhét vào sql, rối + hiệu năng ko cao

SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';
4 Likes

Em cảm ơn bác. Em tính toán được ngày tháng thông qua DATE ADD và BETWEEN rồi ạ.
Nhưng lại có vấn đề là lọc dữ liệu ra bị thiếu. Với cách trên của em truyền thẳng năm và tháng thì lại ra đủ.
Em chưa biết phải xử lý ntn tiếp theo

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?