SQL为按最新日期过滤的每个table_number获取一行

我要为按最新日期过滤的每个table_number获得一行。

如果可能的话,如何使用JPA进行操作,我正在使用Spring Boot。

order_table_id date                        is_done is_started table_number
-------------- --------------------------- ------- ---------- ------------
2              2019-11-15 21:01:51.1266667 0       1          1
3              2019-11-15 21:02:32.4166667 0       1          2
4              2019-11-15 21:02:39.1333333 0       0          3
5              2019-11-15 21:02:46.2200000 1       1          4
10             2019-11-16 21:02:46.2200000 1       0          4
yaya19940102 回答:SQL为按最新日期过滤的每个table_number获取一行

在Postgres中,一种方便的方法是distinct on

select distinct on(table_number) t.*
from mytable t
order by t.table_number,t.date desc,order_table_id desc

Demo on DB Fiddle

order_table_id | date                | is_done_is_ | started | table_number
-------------: | :------------------ | ----------: | ------: | -----------:
             2 | 2019-11-15 21:01:51 |           0 |       1 |            1
             3 | 2019-11-15 21:02:32 |           0 |       1 |            2
             4 | 2019-11-15 21:02:39 |           0 |       0 |            3
            10 | 2019-11-16 21:02:46 |           1 |       0 |            4

NB:由于属于table_number 4的两条记录都具有相同的date,因此您的样本数据实际上没有任何意义。我添加了一个附加的排序条件,以一致的方式打破平局。


在支持窗口功能的RDBMS(例如SQL Server)中,一种方法是使用ROW_NUMBER()

select *
from (
    select 
        t.*,row_number() 
            over(partition by table_number order by date desc,order_table_id desc) rn
    from mytable t
) t
where rn = 1
本文链接:https://www.f2er.com/3084284.html

大家都在问