sql >> データベース >  >> RDS >> PostgreSQL

postgresを使用して月間経常収益(MRR)の結果を計算します

    かなり単純なgenerate_series INTERVALで使用できます sそしてLATERAL JOINを使用できます 各json行のデータを生成します。

    WITH j AS(
    SELECT '{
      "id": "1",
      "amount": 3900,
      "interval": "1 WEEK",
      "created": 1424011935
    }'::json AS data
    UNION ALL
    SELECT '{
      "id": "2",
      "amount": 100,
      "interval": "23.5 DAY",
      "created": 552614400
    }'::json
    ),
    dates AS(
    SELECT
    '2008-03-01 00:00'::timestamp AS start
    ,'2015-03-08 07:00'::timestamp AS stop
    )
    SELECT j.data->>'id'
        ,sum((j.data->>'amount')::int)
        ,count(*) as intervals
    FROM j
    CROSS JOIN dates
    CROSS JOIN LATERAL
        (SELECT i
        FROM generate_series(to_timestamp((j.data->>'created')::int), dates.stop + (j.data->>'interval')::interval,(j.data->>'interval')::interval) as i
        WHERE i BETWEEN dates.start AND dates.stop
        ) AS q
    GROUP BY j.data->>'id'
    

    上記の結果が得られます:

     id |  sum  | intervals
    ----+-------+-----------
     1  | 11700 |         3
     2  | 11000 |       110
    

    SQLFiddle




    1. 毎月実行するSQLクエリを自動化する

    2. JDBCを使用してすべての外部キーを取得します

    3. K-PostGISの最近傍クエリ

    4. カンマ区切りの文字列を使用したMySQL検索