我有一个SQL(MySQL SQL)语句,如下所示,从表bar
中获取10条记录:
SET @foo:=1;
SELECT DISTINCT
@start:=ROUND(RAND()*100),
@start+ROUND(RAND()*100)+1,
CONCAT("id-",@foo:=@foo+1)
FROM
bar
LIMIT 10
它会生成以下独特元素:
...
14 72 id-2
...
9 10 id-8
...
到目前为止,这么好。但我真正想要做的是使用DISTINCT
关键字,以便不添加重复项,仅基于第一个或第一个和第二个列值的唯一性
例如,目前,所有10条记录都是唯一的,因为id-n
元素对于每条记录总是不同的。所以这是可能的:
...
9 10 id-4
...
9 10 id-8
...
我想要做的是让第二个9 10 id-8
元素不在结果集中(或者,9 10 id-4
- 我不关心哪些遗漏了重复项。有没有办法将DISTINCT
约束到第一列或第一列和第二列?
我知道我可以从SQL语句中省略id-n
值,然后使用添加后者的下游脚本对结果进行后处理。但是,出于好奇,我想找到一个SQL查询中包含的解决方案。谢谢!
答案 0 :(得分:1)
好吧,我不是100%确定这是你要做的事情,但似乎你可以将查询结果放在子查询中,然后使用MAX
来获取最后一条记录。
也许是这样的:
SELECT rand1col, rand2col, CONCAT("id-",Max(fooidcol)) as col3
FROM
(
SELECT DISTINCT
@start:=ROUND(RAND()*100) as rand1col,
@start+ROUND(RAND()*100)+1 as rand2col,
@foo:=@foo+1 as fooidcol
FROM bar
) t
GROUP BY rand1col, rand2col
LIMIT 10
测试时遇到的问题是RAND()
不会返回我测试所需的内容,所以我创建了这个SQL Fiddle实际列,试图做到这一点,但似乎可以使用以上查询也是如此。
这是带有上述查询的Fiddle - 在某些时候有效,只需保持刷新。