0

设 a 表为:

  Product ID    |   Date of Sale  | Time of Sale  |   Buyer ID  | ... 
------------------------------------------------------------------
       1        |    2019-01-09   |     22:21     |     12      | ... 
       1        |    2019-01-09   |     9:44      |     13      | ... 
       1        |    2019-01-03   |     10:32     |     11      | ... 
       2        |    2019-01-08   |     14:51     |     55      | ... 
       2        |    2019-01-02   |     11:20     |     10      | ... 
       .        |        .        |       .       |      .      | ... 
       .        |        .        |       .       |      .      | ... 
       .        |        .        |       .       |      .      | ... 

我想创建一个显示最后购买的产品行的视图。话虽如此,这将是这张桌子:

  Product ID    |   Date of Sale  | Time of Sale  |   Buyer ID  | ... 
------------------------------------------------------------------
       1        |    2019-01-09   |     22:21     |     12      | ... 
       2        |    2019-01-08   |     14:51     |     55      | ... 
       .        |        .        |       .       |      .      | ... 
       .        |        .        |       .       |      .      | ... 
       .        |        .        |       .       |      .      | ... 

我很乐意提供我的代码尝试,但他们没有为这个问题添加任何内容,因为它们与实际解决方案相去甚远。但是,我已经在互联网上广泛搜索了几分钟。我知道它必须通过一个函数来完成。

4

1 回答 1

2

一种方法是row_number()

select t.*
from (select t.*,
             row_number() over (partition by product_id order by date_of_sale desc, time_of_sale desc) as seqnum
      from t
     ) t
where seqnum = 1;

通常在这种情况下,我推荐使用相关子查询。但是,您在两列之间划分了日期/时间,因此逻辑有点麻烦。仅对列使用datetime数据类型更有意义。

于 2019-11-27T23:29:57.523 回答