Ngày đầu tiên trong tuần có thể hơi phức tạp, tùy thuộc vào yêu cầu thực tế của bạn (cho dù bạn muốn tuân theo cài đặt ngày đầu tiên của người dùng hay không, sử dụng Chủ nhật bất kể cài đặt, v.v.), xem câu hỏi này : Get first day of week in SQL Server. Dưới đây là một cách để thực hiện:
DECLARE
@today DATE = CURRENT_TIMESTAMP,
@y DATE,
@m DATE,
@w DATE;
SELECT
@y = DATEADD(YEAR, DATEDIFF(YEAR, 0, @today), 0),
@m = DATEADD(MONTH, DATEDIFF(MONTH, 0, @today), 0),
@w = DATEADD(DAY, 1-DATEPART(WEEKDAY, @today), @today);
SELECT
[First day of year] = @y,
[First day of month] = @m,
[First day of week] = @w;
Cho dù bạn chọn ai sau đó, bạn có thể sử dụng trong truy vấn, ví dụ: cho YTD, bạn sẽ sử dụng:
SELECT TicketCount = COUNT(TicketID)
FROM dbo.Ticket
WHERE DtCheckOut >= @y;
Đừng nghĩ rằng bạn cần số < truy vấn nếu bạn đang cố gắng đếm ngược ngay bây giờ. Có bao nhiêu vé sẽ được kiểm tra vào ngày mai nếu tôi đang chạy truy vấn hôm nay? Nếu bạn muốn bảo vệ mình chống lại mà bạn có thể sử dụng:
SELECT COUNT(TicketID)
FROM dbo.Ticket
WHERE DtCheckOut >= @y
AND DtCheckOut < DATEADD(DAY, 1, @now);
Bạn có thể làm cho nó năng động hơn một chút và vượt qua trong một tham số nói rằng 'YTD', 'MTD' hoặc 'đục thân', ví dụ
CREATE PROCEDURE dbo.CountTickets
@Range CHAR(3) = 'YTD'
AS
BEGIN
SET NOCOUNT ON;
-- you may want to handle invalid ranges, e.g.
IF @Range NOT IN ('YTD', 'MTD', 'WTD')
BEGIN
RAISERROR('Please enter a valid range.', 11, 1);
RETURN;
END
DECLARE
@today DATE = CURRENT_TIMESTAMP,
@start DATE;
SELECT
@start = CASE @range
WHEN 'YTD' THEN DATEADD(YEAR, DATEDIFF(YEAR, 0, @today), 0)
WHEN 'MTD' THEN DATEADD(MONTH, DATEDIFF(MONTH, 0, @today), 0)
WHEN 'WTD' THEN DATEADD(DAY, 1-DATEPART(WEEKDAY, @today), @today)
END;
SELECT
Range = @range,
TicketCount = COUNT(TicketID)
FROM dbo.Ticket
WHERE dtCheckOUt >= @start;
END
GO
Bạn muốn tổng số cho cả ba trong cùng một truy vấn? Ngoài ra, ngày đầu tiên trong tuần có ý nghĩa gì đối với bạn? –
Xin lỗi - không có ba truy vấn khác nhau, mục tiêu tương tự là tất cả ... Ngày đầu tiên trong tuần (cho điều này) là chủ nhật. – Fuginator
Ồ, và để rõ ràng hơn, tôi muốn COUNT() cột TicketID ... – Fuginator