我有这个结果集:
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()
有什么想法吗?
答案 0 :(得分:1)
将 MAX(a.id)
与GROUP BY a.categoria
SELECT MAX(a.id), a.categoria
from Articolo a
where novita = 1
GROUP BY a.category
击> <击> 撞击>
要获取每个categoria
的随机ID,您可以使用ranking function 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;
请在此处查看:
这样,它每次都会为每个categoria
提供一个随机ID。
然而,如果您想要第一个,可以使用排名函数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
的第一个ID。
请注意:数据库概念中没有 first 值的含义,因为在关系模型中,行顺序并不重要。并且 无法保证 每次都返回相同的订单,您 到ORDER BY
特定列以获得一致的排序。< / p>