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 值作为参数。
我的 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 值作为参数。