超级用户sql查询

xtfmy6hx  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(327)

我们将购买至少10种产品的用户定义为超级用户。如何编写一个查询,返回每个用户在哪一天成为超级用户。也就是说,对于每个用户,他们在哪一天购买了第10件商品。
下表为交易记录。也就是说,每一行都意味着相应的用户在该日期购买了一些东西。
userid表示用户日期的id表示某个特定用户在2017-09-01 10:23:03购买了某件东西

| Userid    | Date                | 
-----------------------------------
| 123445678 | 2017-09-01 10:23:03 |
| 876543215 | 2016-08-31 08:12:23 |
| 324567893 | 2012-03-02 07:23:12 | 
| 234545566 | 2011-03-04 05:22:13 |
| 783465863 | 2009-03-05 12:23:23 |
oyxsuwqo

oyxsuwqo1#

这个答案可以避免字符串操作

select user_id,date
from (select *,row_number() over(partition by user_id order by date) as row_num
from poweruser
) tmp
where row_num=10;
kuuvgm7e

kuuvgm7e2#

您可以通过将每个用户的数据分组,然后获取所有用户的第10个事务的日期来实现这一点。

SELECT `UserId`, 
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT DATE_FORMAT(`Date`,'%Y-%m-%d %T') 
SEPARATOR ';'),';',10),';',-1) 10th_Transaction_date FROM `Transactions`
GROUP BY `UserId`;

您可以看到这个sqlfiddle演示如何在mysql中获得每个组的第n条记录。
有用的来源:
mysql group\u concat函数介绍
子串索引
注意: 10th_Transaction_date 字符串不是日期。

相关问题