Sql server 2008 独特事件排名第一
表名为EventsSql server 2008 独特事件排名第一,sql-server-2008,Sql Server 2008,表名为Events name event_id qty n1 1 8 n1 2 9 n2 2 25 n3 2 29 n4 2 10 n4 3 11 n3 3 57 n2 3 1 n5 3 2 n1 3
name event_id qty
n1 1 8
n1 2 9
n2 2 25
n3 2 29
n4 2 10
n4 3 11
n3 3 57
n2 3 1
n5 3 2
n1 3 90
我只想为不同的事件id选择top 1。它的sql查询是什么?谢谢。试试这个:
WITH CTE AS (SELECT *,RN=ROW_NUMBER() OVER(PARTITION BY event_id ORDER BY event_id)
FROM Events)
SELECT name,event_id,qty FROM CTE WHERE RN=1
结果:
NAME EVENT_ID QTY
n1 1 8
n1 2 9
n4 3 11
NAME EVENT_ID QTY
n4 3 11
n1 2 9
n1 1 8
请参阅中的结果
编辑:
对于数量的降序:
WITH CTE AS (SELECT *,RN=ROW_NUMBER() OVER(PARTITION BY event_id ORDER BY event_id)
FROM Events)
SELECT name,event_id,qty FROM CTE WHERE RN=1 ORDER BY QTY DESC
结果:
NAME EVENT_ID QTY
n1 1 8
n1 2 9
n4 3 11
NAME EVENT_ID QTY
n4 3 11
n1 2 9
n1 1 8
@丹德:请看我答案中的编辑。如果您满意,请随意接受答案。@RagingBull-是的。我认为他没有清楚地表达这个问题。对于记录,我的查询作为注释-
选择前1个事件id,按事件id顺序按tqty描述从事件组中计数(数量)为tqty
它应该是选择名称和事件id的不同组合的前1
,而不仅仅是事件id。谢谢你,我刚刚用这个“按数量描述顺序”编辑了你的代码。是的,我还没有明确说明我想要什么。@RagingBull,事件id将增长,我想限制它。因此,在上面的示例中,如何仅显示2个按事件id排序的asc?@damdeok:ReplaceSELECT name,event,
为SELECT TOP 2 name,event,
。