SQL 为单个 ID 为一个产品选择多条记录的查询

SQL query for selecting multiple records for one product for a single id

我的 table 看起来像这样,我想要实现的是为一个用户提取所有最早日期的产品记录

product |type_id| user | Date  |Desired ROW_NUMBER as output  |
-------+--------+------+-------+---------------------

 1      |   1  |   A   | 0101  |   1
 1      |   1  |   A   | 0102  |   1
 2      |   3  |   A   | 0105  |   2
 2      |   5  |   A   | 0105  |   2
 3      |   7  |   B   | 0101  |   1
 3      |   8  |   B   | 0104  |   1

所以我想在所需的 row_num 列中提取所有带有“1”的记录,但我还没有想出如何在不进行另一个分组的情况下获得它。任何帮助将不胜感激。

您可以使用 window 函数:

select t.*
from (select t.*,
             rank() over (partition by user order by min_date) as seqnum
      from (select t.*,
                   min(date) over (partition by user, product) as min_date
            from t
           ) t
     ) t
where seqnum = 1;

或者,只有一个子查询:

select t.*
from (select t.*,
             min(date) over (partition by user, product) as min_date_up,
             min(date) over (partition by user) as min_date_u
      from t
     ) t
where min_date_u = min_date_up;

您可以将其解释为 "return all rows where the product has the minimum date for the user"。

Here 是一个 db<>fiddle.

SELECT * 从 [tableName] WHERE Desired ROW_NUMBER = 1 ORDER BY Date[DESC, ASC]

动态传递所需的 ROW_NUMBER 值作为参数。