2

我有一个 SQL (MySQL SQL) 语句,如下所示,从表中获取 10 条记录bar

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第一列或第一列和第二列?

我知道我可以id-n从 SQL 语句中省略该值,然后使用将其重新添加的下游脚本对结果进行后处理。但是,出于好奇,我想找到一个包含在 SQL 查询中的解决方案。谢谢!

4

1 回答 1

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,其中包含试图做到这一点的实际列,但它似乎也适用于上述查询。

这是带有上述查询的小提琴——有时可以工作,只是保持刷新。

于 2013-01-17T00:40:09.887 回答