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

次のランクのLAG()/ LEAD()(Postgresql)

    lag()を使用する必要があります およびlead() データセットの関数は、ペアごとに1行に削減されます(client_id, rank)

    select 
        client_id, order_id, product_id, 
        t.year, rank, prev_year, next_year
    from my_table t
    join (
        select distinct on (client_id, rank)
            client_id, rank, year, 
            lag(year) over w as prev_year, 
            lead(year) over w as next_year
        from my_table
        window w as (partition by client_id order by rank)
        order by 1, 2, 3 desc
        ) s using (client_id, rank)
    order by client_id, rank
    
     client_id | order_id | product_id | year | rank | prev_year | next_year 
    -----------+----------+------------+------+------+-----------+-----------
             1 |        1 |     212346 | 1995 |    1 |           |      1998
             1 |        1 |     912346 | 1995 |    1 |           |      1998
             1 |        1 |     111345 | 1995 |    1 |           |      1998
             1 |        2 |     133368 | 1998 |    4 |      1995 |      2005
             1 |        2 |     233368 | 1998 |    4 |      1995 |      2005
             1 |        3 |     412341 | 2005 |    6 |      1998 |          
             2 |       55 |     312344 | 1995 |    1 |           |      1999
             2 |       57 |     812343 | 1999 |    2 |      1995 |          
    (8 rows)
    



    1. PHP/MySQLにUTCとして日時を保存する

    2. インクリメンタル統計によるパーティションメンテナンスの改善

    3. Oracle SQLクエリを使用してXMLで特定のノード名とその値を選択するにはどうすればよいですか?

    4. MySQLでBigIntをVarcharにキャスト/変換