我有一个这样结构的数据库:
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 的结果。
样本输出:
<块引用>啊啊啊
bbbb
答案 0 :(得分:2)
你也可以试试
select varchar from table where date='2021-07-25'
order by rand() limit 1;
答案 1 :(得分:2)
这里有一个想法,至少,满足简要...
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 |
+----+------------+-----------+
答案 2 :(得分:1)
您可以使用 GROUP BY
语句来帮助您实现这一点,查询将如下所示:
SELECT varchar FROM {table-name} GROUP BY date;