T-SQL 将当前时间向下舍入到最后 15 分钟时间段

bee*_*ive 1 sql-server t-sql

我想选择过去 15 分钟内的数据,例如:

在 12.02 我想要从 11:45 到 12:00 的行

在 12.09 我仍然想要从 11:45 到 12:00 的行

在 12.18 我想要从 12:00 到 12:15 的行

数据以datetime2格式存储,我使用的是2019标准版。感谢任何帮助让我开始。规范稍后可能会更改(例如,10 分钟而不是 15 分钟),但我希望能够自己解决这个问题。

谢谢

Pau*_*ite 6

样本数据:

DECLARE @T table 
(
    t time(0) NOT NULL
);

INSERT @T 
    (t) 
VALUES
    (CONVERT(time(0), '12:02', 8)),
    (CONVERT(time(0), '12:09', 8)),
    (CONVERT(time(0), '12:18', 8));
Run Code Online (Sandbox Code Playgroud)

解决方案:

-- SQL Server 2022, Azure SQL Database, Azure Managed Instance, Azure SQL Edge
SELECT 
    period_end = DATE_BUCKET(MINUTE, 15, T.t)
FROM @T AS T;

-- Others
SELECT
    period_end = 
        DATEADD
        (
            MINUTE,
            15 * 
            (
                DATEDIFF
                (
                    MINUTE, 
                    CONVERT(time(0), '00:00', 8), 
                    T.t
                ) 
                / 15 -- integer division
            ),
            CONVERT(time(0), '00:00', 8)
        )
FROM @T AS T;
Run Code Online (Sandbox Code Playgroud)

输出:

期末
12:00:00
12:00:00
12:15:00