【问题标题】:Rounding seconds to minutes in SQL server在 SQL Server 中将秒舍入为分钟
【发布时间】:2020-09-08 10:53:24
【问题描述】:

我有 10 分钟,即 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

它分别返回 2 和 9 分钟。它不等于 10。我应该如何解决这个问题,使其总和为 10。 我正在使用 SQL Server。

【问题讨论】:

  • 您的实际数据如何?是两行还是两列?如果它是已知的分钟数并且您已使用秒数:(SECONDS + 30) / 60 as used_minutes, 10 - ((SECONDS + 30) / 60) as remaining_minutes

标签: sql sql-server-2012


【解决方案1】:

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

您的数据没有排序,所以这只是使用最大的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 是一个 dbfiddle。

【讨论】:

  • @SabyasachiMukherjee。 . .我不明白你的评论。这回答了您提出的问题。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2020-05-11
    相关资源
    最近更新 更多