-1

我正在尝试从我的 firebird 数据库中获取以下信息:我有一个带有时间戳属性的记录和一个带有货币值的属性。现在我想查询按月累积的货币价值,现在对我来说很棘手:我希望每个月从第一天下午 16:30:00 到下个月的下一个第一天 16:29:59 . 我不确定如何在 where 条件或其他地方添加它?谢谢你帮助我!

例如。时间戳值
...
2012-07-31 17:05:03 23,--
2012-08-01 12:23:15 15,--
剪切:
2012-08-01 16:35:56 25,--
2012 -08-02 12:23:15 5,--
2012-08-25 18:03:34 6,--
2012-08-31 08:03:55 9,--
2012-09-01 12:23: 15 7,--
截止:
2012-09-01 16:47:43 3,--
2012-09-02 19:13:10 8,--
2012-09-10 19:13:10 18,--
2012 -09-30 19:13:10 3,--
2012-10-02 19:13:10 8,--
....

七月: 23,-- + 15,-- = 38,-
八月: 52,--
九月: 32, -- 十月
: 8,-- 以此类推...

4

1 回答 1

1

您需要将日期向后(或向前)移动,以便本月的开始时间落在该月第一天的 00:00,然后简单地按时间戳的年份和月份部分进行分组:

通过一个简单的表格,我得到了预期的结果:

WITH shifteddate AS (
    SELECT DATEADD(MINUTE, -30, DATEADD(HOUR, -16, infodate)) shifteddate, infovalue
    FROM SUMEXAMPLE
)
SELECT EXTRACT(YEAR FROM shifteddate), EXTRACT(MONTH FROM shifteddate), SUM(infovalue)
FROM shifteddate
GROUP BY 1, 2

您也可以使用子查询而不是 CTE,但我只是觉得这更容易阅读。

于 2012-10-11T18:15:30.260 回答