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