Code SQL - Chạy ngày cuỗi mỗi tháng trong một giai đoạn

Liên hệ QC

hoahuongduong1986

Thành viên thường trực
Tham gia
14/11/18
Bài viết
346
Được thích
40
Dear Các A chị và các bạn,
Em đang chạy số liệu SQL và muốn lấy dữ liệu tại cuối mỗi tháng trong một giai đoạn. Ví dụ, Ngày đầu là 01/01/2019 ngày cuối là 20/06/2020. Giờ biểu diễn lệnh Code SQL như thế nào để ngày BUSINESS DATE nó chạy hai ngày đầu mút trên và cuối mỗi tháng trong hai đầu mút này ạ 31/01/2019; 28/02/2019, 31.03.2019....31.05.2020, 20.06.2020.

Em cảm ơn anh chị và các bạn
 
Bạn dùng:
Select * From Table1 Where [BUSINESS DATE] >= '31/01/2019' And [BUSINESS DATE] <= '28/02/2019 23:59:59'
 
Bạn dùng:
Select * From Table1 Where [BUSINESS DATE] >= '31/01/2019' And [BUSINESS DATE] <= '28/02/2019 23:59:59'
Khoonhg được anh ạ. Nó lấy toàn bộ số ngày xuất hiện trong khoảng này.

Em thử làm code này cũng không được ạ
Where BUSINESS_DATE IN (SELECT MAX(BUSINESS_DATE) FROM VPB_WHR2.dbo.T2b

WHERE BUSINESS_DATE between @startdate and @enddate

GROUP BY YEAR(BUSINESS_DATE), MONTH(BUSINESS_DATE))
 
Dear Các A chị và các bạn,
Em đang chạy số liệu SQL và muốn lấy dữ liệu tại cuối mỗi tháng trong một giai đoạn. Ví dụ, Ngày đầu là 01/01/2019 ngày cuối là 20/06/2020. Giờ biểu diễn lệnh Code SQL như thế nào để ngày BUSINESS DATE nó chạy hai ngày đầu mút trên và cuối mỗi tháng trong hai đầu mút này ạ 31/01/2019; 28/02/2019, 31.03.2019....31.05.2020, 20.06.2020.

Em cảm ơn anh chị và các bạn
Chưa hiểu lắm. Tức là muốn lấy từ ngày đầu tháng tới ngày cuối tháng? hay group theo tháng?
 
Khoonhg được anh ạ. Nó lấy toàn bộ số ngày xuất hiện trong khoảng này.

Ah tôi hiểu sai ý đồ của bạn.
Tức là bạn muốn lấy dữ liệu của riêng 1 ngày cuối tháng (hay dữ liệu tổng cộng của nguyên tháng) và tháng đó nằm trong khoảng bạn muốn truy vấn là từ 01/01/2019 - 20/06/2020?
Tức sẽ có 18 dòng dữ liệu trả về, dòng cuối sẽ là dữ liệu ngày 20/06/2020?
 
Khoonhg được anh ạ. Nó lấy toàn bộ số ngày xuất hiện trong khoảng này.

Em thử làm code này cũng không được ạ
Where BUSINESS_DATE IN (SELECT MAX(BUSINESS_DATE) FROM VPB_WHR2.dbo.T2b

WHERE BUSINESS_DATE between @startdate and @enddate

GROUP BY YEAR(BUSINESS_DATE), MONTH(BUSINESS_DATE))
Thử
where (BUSINESS_DATE between datevalue("2019/1/1") and datevalue("2020/6/20") and month(BUSINESS_DATE)<>month(BUSINESS_DATE+1)) or BUSINESS_DATE = datevalue("2020/6/20")
 
Lần chỉnh sửa cuối:
Ah tôi hiểu sai ý đồ của bạn.
Tức là bạn muốn lấy dữ liệu của riêng 1 ngày cuối tháng (hay dữ liệu tổng cộng của nguyên tháng) và tháng đó nằm trong khoảng bạn muốn truy vấn là từ 01/01/2019 - 20/06/2020?
Tức sẽ có 18 dòng dữ liệu trả về, dòng cuối sẽ là dữ liệu ngày 20/06/2020?
Dạ đúng rồi anh ạ. Thay vì em viết 18 lần ngày gồm hai đầu mút và ngày cuối tháng của các tháng ở giữa ạ. Thì viết sao nó vẫn hiểu là thế ạ
Bài đã được tự động gộp:

Thử
where (BUSINESS_DATE between datevalue("2019/1/1") and datevalue("2020/6/20") and month(BUSINESS_DATE)<month(BUSINESS_DATE+1)) or BUSINESS_DATE = datevalue("2020/6/20")
Em không mang máy về nên chưa thử ạ. Nhưng em thấy có vẻ không đúng ạ !
 
Dạ đúng rồi anh ạ. Thay vì em viết 18 lần ngày gồm hai đầu mút và ngày cuối tháng của các tháng ở giữa ạ. Thì viết sao nó vẫn hiểu là thế ạ
Nhưng bạn muốn lấy dữ liệu tổng của từng tháng hay dữ liệu tại thời điểm cuối mỗi tháng?
 
Tại một thời điểm cuối mỗi tháng ạ

À còn một vấn đề nữa là: có đảm bảo trong Table mà bạn đang xét luôn có dữ liệu của ngày cuối tháng của từng tháng?
Hoặc là lấy dữ liệu của ngày cao nhất trong tháng đó nếu không có ngày cuối tháng?
 
À còn một vấn đề nữa là: có đảm bảo trong Table mà bạn đang xét luôn có dữ liệu của ngày cuối tháng của từng tháng?
Hoặc là lấy dữ liệu của ngày cao nhất trong tháng đó nếu không có ngày cuối tháng?
Ngoài hai ngày đầu mút thì luôn có số liệu ngày cuối tháng ạ.
 
Dạ đúng rồi anh ạ. Thay vì em viết 18 lần ngày gồm hai đầu mút và ngày cuối tháng của các tháng ở giữa ạ. Thì viết sao nó vẫn hiểu là thế ạ
Bài đã được tự động gộp:


Em không mang máy về nên chưa thử ạ. Nhưng em thấy có vẻ không đúng ạ !
Thử mới biết chạy được không
 
Thử mới biết chạy được không

Câu lện SQL của bác HieuCD rất hay đó nhưng nếu CSDL không có ngày cuối tháng thì nó sẽ bỏ qua tháng đó.
Câu lệnh này lấy ngày cao nhất trong tháng xét: bạn chạy thử xem

Mã:
SELECT *
FROM Table1
WHERE (BUSINESS_DATE BETWEEN DateValue("2019/1/1") AND DateValue("2020/6/20")) AND BUSINESS_DATE IN (SELECT Max(BUSINESS_DATE) AS NGAYCUOI
FROM Table1
GROUP BY Month([BUSINESS_DATE]), Year([BUSINESS_DATE]))
 
Thử mới biết chạy được không
E đã chạy thử mà không được ạ.
Bài đã được tự động gộp:

Câu lện SQL của bác HieuCD rất hay đó nhưng nếu CSDL không có ngày cuối tháng thì nó sẽ bỏ qua tháng đó.
Câu lệnh này lấy ngày cao nhất trong tháng xét: bạn chạy thử xem

Mã:
SELECT *
FROM Table1
WHERE (BUSINESS_DATE BETWEEN DateValue("2019/1/1") AND DateValue("2020/6/20")) AND BUSINESS_DATE IN (SELECT Max(BUSINESS_DATE) AS NGAYCUOI
FROM Table1
GROUP BY Month([BUSINESS_DATE]), Year([BUSINESS_DATE]))
Nó báo 'DateValue' is not a recognized built-in function name Anh ạ. Em chưa hiểu cái DATEVALUE là gì ạ
Bài đã được tự động gộp:

Câu lện SQL của bác HieuCD rất hay đó nhưng nếu CSDL không có ngày cuối tháng thì nó sẽ bỏ qua tháng đó.
Câu lệnh này lấy ngày cao nhất trong tháng xét: bạn chạy thử xem

Mã:
SELECT *
FROM Table1
WHERE (BUSINESS_DATE BETWEEN DateValue("2019/1/1") AND DateValue("2020/6/20")) AND BUSINESS_DATE IN (SELECT Max(BUSINESS_DATE) AS NGAYCUOI
FROM Table1
GROUP BY Month([BUSINESS_DATE]), Year([BUSINESS_DATE]))
Em chạy được rồi ạ. Em cảm ơn sự trợ giúp của các anh ạ !
 
Lần chỉnh sửa cuối:
Dear Các A chị và các bạn,
Em đang chạy số liệu SQL và muốn lấy dữ liệu tại cuối mỗi tháng trong một giai đoạn. Ví dụ, Ngày đầu là 01/01/2019 ngày cuối là 20/06/2020. Giờ biểu diễn lệnh Code SQL như thế nào để ngày BUSINESS DATE nó chạy hai ngày đầu mút trên và cuối mỗi tháng trong hai đầu mút này ạ 31/01/2019; 28/02/2019, 31.03.2019....31.05.2020, 20.06.2020.

Em cảm ơn anh chị và các bạn
Bạn có thể dùng EOMONTH để lấy ngày cuối tháng
select *
from [Table1] a
where a.[BUSINESS DATE] between '2019-01-01' and '2020-06-20 23:59:59'
and a.[BUSINESS DATE] in (Select DISTINCT EOMONTH(a.[BUSINESS DATE],0) from [Table1])
 
Web KT
Back
Top Bottom