SQL 按偏移日期范围分组

标签 sql sql-server sql-server-2008 t-sql

假设我有一个包含姓名、每日 yield 和日期的表格

GainTable

NAME     GAIN     DATE
JOHN     10      01/01/2014
ISABEL   20      01/02/2014
VASILIY  10      01/01/2014

假设每个人每天都有收获。

我想知道每个人每月的 yield

我就是这样做的。

SELECT NAME, SUM(GAIN), MONTH(DATE)
FROM GainTable
group by Name, YEAR(DATE), MONTH(DATE)

现在,我的任务是像以前一样按月分组,但从该月的第 2 天开始,到下个月的第 1 天结束(例如,8 月组将从 8 月 2 日到 9 月 1 日开始)。 我怎样才能做到这一点?如有任何建议,我们将不胜感激。

最佳答案

尝试从“真实”日期中减去单个日期,然后按该月(和年份)进行分组:

SELECT NAME,YEAR(DATEADD(D, -1, DATE)), MONTH(DATEADD(D, -1, DATE)), SUM(GAIN) Gain_Total
FROM GainTable
GROUP BY Name, YEAR(DATEADD(D, -1, DATE)), MONTH(DATEADD(D, -1, DATE))

关于SQL 按偏移日期范围分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25313169/

相关文章:

MySQL 连接来自另一个表的计数匹配记录,但我也需要零值

sql-server - 将日期列从 excel 导入 SSIS - 在 SQL 中获取长日期格式

sql-server - 在 SQL Server 中,什么性能更好 : where ProcessedDate is null or where Processed = 0

sql-server-2008 - 计算列何时更新?

sql - 消息 203,级别 16,状态 2,不是有效标识符

sql - 获取事务中插入的记录数

php - 多次使用绑定(bind)参数

php - 看起来 SQL 的 WHERE 子句和 JOIN 不能一起工作

php - 根据选择选项值在我的 sql 表中保存信息

sql-server - 根据条件过滤重复行