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

Chia sẻ bởi:hands
★★★★★
Quảng cáo

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 >= '31/01/2019' And <= '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))

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ế ạ

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?

Ngoài hai ngày đầu mút thì luôn có số liệu ngày cuối tháng ạ.

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")

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ế ạ

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

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ạn có thể dùng EOMONTH để lấy ngày cuối tháng
select *
from a
where a. between '2019-01-01' and '2020-06-20 23:59:59'
and a. in (Select DISTINCT EOMONTH(a.,0) from )

Em cảm ơn anh ạ.

Em dùng câu lệnh này lấy dữ liệu từ SQL SV hay Excel?
hàm EOMONTH() chỉ có trong Excel. Tôi cũng chưa thử dùng hàm này trong truy vấn dữ liệu Excel (qua ADO).

SQL nó chạy được anh ạ. Em chạy nó cũng được ạ.

www.giaiphapexcel.com/diendan/threads/code-sql-ch%E1%BA%A1y-ng%C3%A0y-cu%E1%BB%97i-m%E1%BB%97i-th%C3%A1ng-trong-m%E1%BB%99t-giai-%C4%91o%E1%BA%A1n.150432/

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
★★★★★ 5 ★ 1 👤 0 ▥ 0
Quảng cáo

Bạn nên đọc

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm