高级用户SQL查询

时间:2018-01-06 15:28:16

标签: mysql sql

我们将购买至少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 |

2 个答案:

答案 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

SUBSTRING_INDEX

NB: 10th_Transaction_date是字符串而不是日期。