You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据Storage table计算产品在存储周期内的存放天数?

计算各产品存储周期总存放天数的解决方案

嘿,这个问题很常见,我来帮你搞定!要计算每个产品的总存放天数,核心思路就是先算出每条存储记录的存放时长,再按product_id分组汇总求和就行。不过不同数据库的时间处理函数略有差异,我分几种主流数据库给你具体的实现方案:

一、按实际存放时长精确计算(保留小数,精确到秒级)

这种方式会把每条记录的实际存放秒数转换成天数,适合需要精准统计的场景。

MySQL 实现

SELECT 
    product_id,
    ROUND(SUM(TIMESTAMPDIFF(SECOND, date_add, date_remove) / 86400), 3) AS total_storage_days
FROM 
    Storage
GROUP BY 
    product_id;

解释:TIMESTAMPDIFF(SECOND, date_add, date_remove)计算两个时间的秒数差,除以86400(一天的总秒数)得到天数,ROUND用来控制小数位数,这里保留3位。

PostgreSQL 实现

SELECT 
    product_id,
    ROUND(SUM(EXTRACT(EPOCH FROM (date_remove - date_add)) / 86400), 3) AS total_storage_days
FROM 
    Storage
GROUP BY 
    product_id;

解释:date_remove - date_add得到时间间隔,EXTRACT(EPOCH FROM ...)把间隔转换成秒数,再除以86400得到天数。

SQL Server 实现

SELECT 
    product_id,
    ROUND(SUM(DATEDIFF(SECOND, date_add, date_remove) / 86400.0), 3) AS total_storage_days
FROM 
    Storage
GROUP BY 
    product_id;

注意:这里要除以86400.0而不是整数86400,避免整数除法丢失小数部分。

二、按自然日差计算(只统计日期跨度,忽略具体时分秒)

如果业务只关心跨了多少个自然日(比如哪怕只存放了1小时,跨天就算1天),可以用这种方式:

MySQL 实现

SELECT 
    product_id,
    SUM(DATEDIFF(date_remove, date_add)) AS total_storage_days
FROM 
    Storage
GROUP BY 
    product_id;

DATEDIFF直接返回两个日期的天数差(只看日期部分)。

PostgreSQL 实现

SELECT 
    product_id,
    SUM(DATE_PART('day', date_remove - date_add)) AS total_storage_days
FROM 
    Storage
GROUP BY 
    product_id;

SQL Server 实现

SELECT 
    product_id,
    SUM(DATEDIFF(DAY, date_add, date_remove)) AS total_storage_days
FROM 
    Storage
GROUP BY 
    product_id;

三、示例数据验证

拿你提供的product_id=10的三条记录举例:

  • 第一条:2018-04-02 08:28:43 → 2018-04-03 07:21:08,实际时长≈0.959天,自然日差1天
  • 第二条:2018-04-05 08:28:43 → 2018-04-06 08:28:50,实际时长≈1.000天,自然日差1天
  • 第三条:2018-04-01 08:28:43 → 2018-04-05 08:28:50,实际时长≈4.000天,自然日差4天

按精确计算总天数≈5.959天,按自然日计算总天数=6天,和代码运行结果一致。

内容的提问来源于stack exchange,提问作者valera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:40:45