【问题标题】:firebird sql month time cumulatedfirebird sql 月时间累计
【发布时间】:2012-10-11 11:09:37
【问题描述】:

我正在尝试从我的 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,--
....

7 月:23,-- + 15,-- = 38,-
8 月:52,--
9 月:32,--
十月:8,-- 等等...

【问题讨论】:

    标签: sql timestamp firebird


    【解决方案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,但我觉得这更容易阅读。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-04
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2021-10-11
      • 2021-12-28
      • 1970-01-01
      相关资源
      最近更新 更多