-1

firebird db から次のものを取得しようとしています: Timestamp 属性と通貨値を持つ属性を持つレコードがあります。ここで、月ごとに累積された通貨の値をクエリしたいのですが、ここで難しい問題が発生します。毎月、初日の午後 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,--
10 月: 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 に答える