在 SQL 服务器中将秒舍入为分钟

Rounding seconds to minutes in SQL server

我有 10 分钟,即 activity 的 600 秒。我已经在几分钟内显示了使用过的部分和剩余部分。例如,如果使用了 90 秒,则还剩下 510 秒。我必须显示已用 2 分钟和剩余 8 分钟。我有以下 SQL

WITH SampleData (SECONDS) AS (  
    SELECT 90
    UNION ALL 
    SELECT 510
)
SELECT roundedUpSeconds =  CEILING(CAST(SECONDS AS DECIMAL(18,6)) / 60)
FROM SampleData

它 returns 分别是 2 分钟和 9 分钟。它不等于 10。我应该如何解决这个问题,以便它总计为 10。 我正在使用 SQL 服务器。

90 秒是 1.5 分钟,510 秒是 8.5 分钟,加起来是 10,但由于您使用的是上限函数,它会将 1.5 舍入到 2,将 8.5 舍入到 9,所以您没有得到正确答案

取四舍五入的数字相加是很棘手的。您可以计算总和和累计总和 - 然后使用最后一个值的差值。

您的数据没有排序,因此仅使用最大值 seconds 作为最后得分:

WITH SampleData (SECONDS) AS (  
      SELECT 90
      UNION ALL 
      SELECT 510
     )
SELECT (CASE WHEN seconds < max_seconds THEN minutes
             ELSE total_minutes - sum(minutes) over (order by seconds rows between unbounded preceding and 1 preceding)
        END)
FROM (SELECT sd.*,
             (SUM(seconds) OVER ()) / 60 as total_minutes,
             CEILING(seconds * 1.0 / 60) as minutes,
             MAX(seconds) OVER () as max_seconds
      FROM SampleData sd
     ) sd;

Here 是一个 db<>fiddle.