首页 > 解决方案 > 从每个日期中选择一个随机结果

问题描述

我有一个结构如下的数据库:

int, date, varchar
1, 2021-07-25, aaaa
2, 2021-07-25, aaba
3, 2021-07-25, aabb
4, 2021-07-26, bbbb
5, 2021-07-26, bbba
6, 2021-07-26, bbaa
7, 2021-07-26, babb

我需要为每个日期随机抽取一个结果。因此,在此示例中,07-25 的一个结果和 07-26 的一个结果。

样本输出:

啊啊
啊啊啊啊

标签: mysqldaterandom

解决方案


这是一个至少满足简短的想法......

DROP TABLE IF EXISTS ralph97;

CREATE TABLE ralph97
(id INT AUTO_INCREMENT PRIMARY KEY
,date DATE NOT NULL
,my_string CHAR(4) NOT NULL
);

INSERT INTO ralph97 VALUES
(1,'2021-07-25','aaaa'),
(2,'2021-07-25','aaba'),
(3,'2021-07-25','aabb'),
(4,'2021-07-26','bbbb'),
(5,'2021-07-26','bbba'),
(6,'2021-07-26','bbaa'),
(7,'2021-07-26','babb');

...

WITH cte AS
(SELECT *, ROW_NUMBER() OVER (PARTITION BY date ORDER BY RAND()) x FROM ralph97)
SELECT id, date, my_string FROM cte WHERE x = 1;
+----+------------+-----------+
| id | date       | my_string |
+----+------------+-----------+
|  3 | 2021-07-25 | aabb      |
|  6 | 2021-07-26 | bbaa      |
+----+------------+-----------+

WITH cte AS
(SELECT *, ROW_NUMBER() OVER (PARTITION BY date ORDER BY RAND()) x FROM ralph97)
SELECT id, date, my_string FROM cte WHERE x = 1;
+----+------------+-----------+
| id | date       | my_string |
+----+------------+-----------+
|  2 | 2021-07-25 | aaba      |
|  4 | 2021-07-26 | bbbb      |
+----+------------+-----------+

推荐阅读