Code SQL – Chạy ngày cuỗi mỗi tháng trong một giai đoạn
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.T2bWHERE 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ự
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