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

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
254
Được thích
19
Điểm
185
Tuổi
33
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
 

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
254
Được thích
19
Điểm
185
Tuổi
33
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))
 

OverAC

Đỗ Nguyên Bình
Thành viên BQT
Administrator
Tham gia ngày
30 Tháng năm 2006
Bài viết
2,628
Được thích
14,371
Điểm
1,910
Nơi ở
Ho Chi Minh City, Vietnam
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?
 

ongke0711

Thành viên tiêu biểu
Tham gia ngày
7 Tháng chín 2006
Bài viết
772
Được thích
884
Điểm
860
Nơi ở
HCM
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?
 

HieuCD

Chuyên gia GPE
Tham gia ngày
14 Tháng chín 2010
Bài viết
7,294
Được thích
14,380
Điểm
1,860
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:

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
254
Được thích
19
Điểm
185
Tuổi
33
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 ạ !
 

ongke0711

Thành viên tiêu biểu
Tham gia ngày
7 Tháng chín 2006
Bài viết
772
Được thích
884
Điểm
860
Nơi ở
HCM
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?
 

ongke0711

Thành viên tiêu biểu
Tham gia ngày
7 Tháng chín 2006
Bài viết
772
Được thích
884
Điểm
860
Nơi ở
HCM
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?
 

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
254
Được thích
19
Điểm
185
Tuổi
33
À 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 ạ.
 

HieuCD

Chuyên gia GPE
Tham gia ngày
14 Tháng chín 2010
Bài viết
7,294
Được thích
14,380
Điểm
1,860
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
 

ongke0711

Thành viên tiêu biểu
Tham gia ngày
7 Tháng chín 2006
Bài viết
772
Được thích
884
Điểm
860
Nơi ở
HCM
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]))
 

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
254
Được thích
19
Điểm
185
Tuổi
33
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:

excel_lv1.5

Thành viên tích cực
Tham gia ngày
20 Tháng mười 2017
Bài viết
806
Được thích
1,401
Điểm
360
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])
 

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
254
Được thích
19
Điểm
185
Tuổi
33

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
254
Được thích
19
Điểm
185
Tuổi
33
Top Bottom