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

PostgreSQLでグループごとに最後の行を取得する方法

    PostgreSQLでは、テーブルの最後の行を取得したり、グループごとに最後の行を取得したりする必要がある場合があります。 PostgreSQLでグループごとに最後のレコードを取得する方法は次のとおりです。


    テーブルの最後の行を取得

    次のPostgreSQLテーブルがあるとします。

    postgres=#create table product_sales(product varchar(10),
              order_date date, sale int);
    
    postgres=#insert into product_sales(product, order_date, sale)
    values('A','2020-05-01 03:00:00',250),
    ('B','2020-05-01 05:30:00',350),
    ('C','2020-05-01 07:45:00',1250),
    ('A','2020-05-02 02:34:00',450),
    ('B','2020-05-02 01:24:00',650),
    ('C','2020-05-02 12:34:00',1050),
    ('A','2020-05-03 04:00:45',150),
    ('B','2020-05-03 05:45:00',250),
    ('C','2020-05-03 09:50:00',1850);
    
    postgres=# select * from product_sales;
     product |      order_date     | sale
    ---------+---------------------+------
     A       | 2020-05-01 03:00:00 |  250
     B       | 2020-05-01 05:30:00 |  350
     C       | 2020-05-01 07:45:00 | 1250
     A       | 2020-05-02 02:34:00 |  450
     B       | 2020-05-02 01:24:00 |  650
     C       | 2020-05-02 12:34:00 | 1050
     A       | 2020-05-03 04:00:45 |  150
     B       | 2020-05-03 05:45:00 |  250
     C       | 2020-05-03 09:50:00 | 1850
    

    ボーナス読み取り:PostgreSQL作成関数


    行の並べ替え方法に応じて、テーブルの最後の行を取得するためのクエリは次のとおりです。上記の例では、レコードがタイムスタンプで追加されているため、最新のタイムスタンプを持つ行を選択します。

    postgres=# select * from product_sales 
               order by order_date desc
               limit 1;
     product |     order_date      | sale
    ---------+---------------------+------
     C       | 2020-05-03 09:50:00 | 1850
    

    上記のクエリでは、タイムスタンプの降順で行を並べ替え、LIMIT句を使用して上位1行を選択します。

    ボーナスリード:PostgreSQL Create Schema



    グループごとの最後のレコードを取得

    グループごと、つまり各製品ごとに最後の行を取得するSQLクエリは次のとおりです。

    postgres=# select distinct on (product) product, order_date, sale
               from product_sales
               order by product, order_date desc;
    
     product |     order_date      | sale
    ---------+---------------------+------
     A       | 2020-05-03 04:00:45 |  150
     B       | 2020-05-03 05:45:00 |  250
     C       | 2020-05-03 09:50:00 | 1850
    

    上記のクエリでは、最初に行を productで並べ替えます (昇順)および order_date (降順)。次に、DISTINCT ON句を使用して、グループごとの最上位レコードのみを選択します。これは、グループごとの最後のレコードにすぎません。

    ボーナスリード:PostgreSQLでヒストグラムを作成する方法

    うまくいけば、PostgreSQLでグループごとの最後の行を簡単に取得できるようになりました。

    Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。

    1. PostgreSQLを使用してPGpointforGeolocationを操作するにはどうすればよいですか?

    2. mysql-列が多すぎますか?

    3. パート2–大規模なデータベース図を整理する方法

    4. データベース設計のベストプラクティスとヒントに関する13のブログ記事