我们将购买至少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 |
答案 0 :(得分:2)
这个答案可以避免字符串操作
quora
答案 1 :(得分:1)
您可以通过对每个用户的数据进行分组,然后为所有用户获取第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 Demo 如何在mysql中获得每组的第n条记录。
有用的消息来源:
Introduction to MySQL GROUP_CONCAT function
NB: 10th_Transaction_date
是字符串而不是日期。