Per il primo giorno della settimana può essere un po 'complicato, a seconda delle esigenze effettive (se si desidera obbedire o meno all'impostazione data dall'utente, utilizzare domenica indipendentemente dall'impostazione, ecc.), Vedere questa domanda : Get first day of week in SQL Server. Ecco un modo per farlo:
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;
Qualsiasi cosa si sta cercando, è possibile utilizzare nella query, ad es. per YTD si usa:
SELECT TicketCount = COUNT(TicketID)
FROM dbo.Ticket
WHERE DtCheckOut >= @y;
Non davvero che è necessario la parte < della query, se si sta cercando di ottenere un conteggio fino a questo momento. Quanti biglietti saranno stati ritirati domani se sto eseguendo la query oggi? Se si desidera proteggere se stessi contro che è possibile utilizzare:
SELECT COUNT(TicketID)
FROM dbo.Ticket
WHERE DtCheckOut >= @y
AND DtCheckOut < DATEADD(DAY, 1, @now);
si potrebbe rendere un po 'più dinamica e passare un parametro che dice 'inizio anno', 'MTD' o 'WTD', ad esempio,
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
Vuoi i totali per tutti e tre nella stessa query? Cosa significa per te il primo giorno della settimana? –
Ci scusiamo - non ci sono tre query diverse, obiettivo simile che è tutto ... Il primo giorno della settimana (per questo) è domenica. – Fuginator
Oh, e per essere più chiari, voglio COUNT() la colonna TicketID ... – Fuginator