SQL,基于日期列在列中求和

SQL,基于日期列在列中求和,sql,db2,Sql,Db2,我与SQL的关系中断了很长时间,有点生疏了。假设我的表中有3列:用户名、销售额、日期 我需要一个select语句来显示基于此表的4列: username sum of value_of_sales (where date = today) sum of value_of_sales (where date = today-1) sum of value_of_sales (where date = today-2) 我使用的是db2。不需要将这三种功能合并在一起,单独完成它们非常简单: 今天:

我与SQL的关系中断了很长时间,有点生疏了。假设我的表中有3列:用户名、销售额、日期

我需要一个select语句来显示基于此表的4列:

username
sum of value_of_sales (where date = today)
sum of value_of_sales (where date = today-1)
sum of value_of_sales (where date = today-2)

我使用的是db2。

不需要将这三种功能合并在一起,单独完成它们非常简单:

今天:

SELECT username, SUM(value_of_sale) FROM `tableName` WHERE DATE(`date`) = CURDATE() GROUP BY username
昨天:

SELECT username, SUM(value_of_sale) FROM `tableName` WHERE DATE(`date`) = DATE_ADD(CURDATE(), INTERVAL -1 DAY) GROUP BY username
两天前:

SELECT username, SUM(value_of_sale) FROM `tableName` WHERE DATE(`date`) = DATE_ADD(CURDATE(), INTERVAL -2 DAY) GROUP BY username
DATE('DATE')
获取时间戳的日期部分。如果您的数据只是列在日期中,那么您可以将“日期”与今天的日期进行比较

CURDATE()
获取服务器中今天的日期


DATE\u ADD()
用于增加或减少天数。

使用
SUM
分组方式

SELECT username,
(CASE WHEN date = CURRENT_DATE THEN value_of_sale ELSE 0 END) AS SUMtoday,
(CASE WHEN date = DAYOFYEAR(CURRENT_DATE) - 1 ) THEN value_of_sale ELSE 0 END) AS SUMtoday-1,
(CASE WHEN date = DAYOFYEAR(CURRENT_DATE) - 2 ) THEN value_of_sale ELSE 0 END) AS SUMtoday-2
FROM yourtable
GROUP BY username

这肯定会对你有帮助。谢谢

也许不是最有效的方法,但是

select username, 
sum(case when date = today then value_of_sales else 0 end) [Today],
sum(case when date = today-1 then value_of_sales else 0 end) [Yesterday],
sum(case when date = today-2 then value_of_sales else 0 end) [TheDayBefore]
from table
group by username

如果您发布了您已经处理过的任何代码以及您必须提供的任何示例数据,这将非常有用。
select username, 
sum(case when date = today then value_of_sales else 0 end) [Today],
sum(case when date = today-1 then value_of_sales else 0 end) [Yesterday],
sum(case when date = today-2 then value_of_sales else 0 end) [TheDayBefore]
from table
group by username