0

我有这个结果集:

select a.id, a.categoria from Articolo a
where novita = 1
order by a.categoria, newid()

id          categoria
----------- -----------
3           4
11          4
1           4
12          5
13          5
4           6

我会从每个不同的类别中获得第一个产品(以随机顺序):

id          categoria
----------- -----------
3           4
12          5
4           6

理想情况下像

select FIRST(a.id), a.categoria from Articolo a
where novita = 1
order by a.categoria, newid()

有任何想法吗?

4

1 回答 1

1

MAX(a.id)与_GROUP BY a.categoria

SELECT MAX(a.id), a.categoria 
from Articolo a
where novita = 1
GROUP BY a.category


更新

要获得每个的随机 id,categoria您可以使用排名函数 ROW_NUMBER() OVER(PARTITION BY categoria)ORDER BY NEWID获得随机排序,如下所示:

WITH CTE
AS
(
  SELECT id, categoria, ROW_NUMBER() OVER(PARTITION BY categoria
                                          ORDER BY NEwID()) AS rn
  FROM Articolo
)
SELECT id, categoria
FROM CTE
WHERE rn = 1;

在这里查看它的实际效果:

这样,它每次都会给你一个随机的ID categoria


但是,如果你想要第一个,你可以使用ORDER BY(SELECT 1)里面的排名功能ROW_NUMBER()

WITH CTE
AS
(
  SELECT id, categoria, ROW_NUMBER() OVER(PARTITION BY categoria
                                          ORDER BY (select 1)) AS rn
  FROM Articolo
)
SELECT id, categoria
FROM CTE
WHERE rn = 1;

这将为您提供每个categoria.

注意:数据库概念中第一个值没有意义,因为在关系模型中,行的顺序并不重要。并且不保证每次都返回相同的顺序,您必须ORDER BY特定列才能获得一致的顺序。

于 2013-05-24T11:04:17.013 回答