我有一个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语句中。然而,出于好奇,我希望找到SQL查询中包含的解决方案。谢谢!
发布于 2013-01-17 00:40:09
嗯,我不是百分之百确定这就是你想要做的,但是看起来你可以把你的查询结果放在一个子查询中,然后使用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,这些列试图做到这一点,但它似乎也适用于上面的查询。
下面是带有上述查询的小提琴 --在某些时候工作,只需保持刷新即可。
https://stackoverflow.com/questions/14370005
复制相似问题