我有一张桌子,看起来像这样:

start_date    end_date       id   value
05.10.2010    07.10.2010      1    5
11.12.2010    15.12.2010      2    10
01.01.2023                    3    6

我想编写一个SQL查询,将每个id从Start_Date到End_Date的天数与其值相乘.因此,期望的结果是:

id  sum_value
1    15
2    50
3    60

它是15,因为id 1有3天(从05.10.2010到07.10.2010),值是5

它是50,因为id2有5天(从2010年12月11日到2010年12月15日),值是10

它是60,因为id 3有10天(从01.01.2023到当前日期),值为6 如果end_date为空,则表示其当前日期

如何做到这一点?

推荐答案

DATEDIFF()减go 日期.加1,因为它不包括两端.

使用IFNULL()将缺少的end_date替换为当前日期.

SELECT id, value * (1 + (datediff(IFNULL(end_date, CURDATE()), start_date)) AS sum_value
FROM yourtable

Mysql相关问答推荐

左联接重复问题

为什么MySQL不考虑在联接中使用(JSON)函数索引,而考虑在生成的列上使用索引?

从insert语句获取新生成的虚拟UUID

使用字符串文字与使用日期文字时的SQL行为

MySQL MDL(元数据锁)为什么会导致死锁?

按相关表中的计数和特定值过滤

获取 TEXT 类型行的百分比

谁能帮我优化低性能的mysql查询

MySQL 中的 LATERAL 语法 - 是否只是说左表首先执行以便下一个可以引用它?

按 SQL 删除分组前的重复项

MySql查询无结果

更改整数时间到日期格式 MM/DD/YY,如 python 中的 datetime.fromtimestamp

如何在sql中挑出某些名称

判断一对记录是否属于多个组ID

终止空闲的mysql连接

MySQL 5.6 DATETIME 不接受毫秒/微秒

ASP.NET EntityFramework 获取数据库名称

mysqli_fetch_array() 期望参数 1 为 mysqli_result,布尔值

在 PHP/MySQL 中将日期时间存储为 UTC

MySQL 实用程序 - ~/.my.cnf 选项文件