我在存储过程中有这个查询:
SELECT DISTINCT
a.UserProfileId,
a.FromProfileId,
mm.FromProfileId as ToProfileID
FROM ( SELECT
mup.UserProfileId,
mmb.FromProfileId
FROM dbo.Mindcracker_MailBox mmb
LEFT JOIN Mindcracker_UserProfile mup
ON mmb.ToProfileId=mup.UserProfileId
WHERE mup.UserProfileId=1144 ) a
LEFT JOIN dbo.Mindcracker_MailBox mm
ON a.FromProfileId=mm.ToProfileId
以上查询产生以下结果:
UserProfielId FromProfileID ToProfielID
1144 1152 1144
1144 1152 1378
1144 1152 1483
1144 1333 1143
1144 1333 1148
1144 1333 1290
1144 1333 1297
1144 1333 1333
1144 1333 1378
1144 1378 1143
1144 1378 1185
1144 1378 1333
1144 1378 1378
1144 1483 1143
1144 1483 1144
1144 1483 1297
1144 1483 1483
1144 11526 1148
1144 11526 1290
1144 11526 1333
1144 11526 1378
1144 11526 11526
我想在FromProfileId Column的基础上得到唯一的值,我的输出应该是这样的:
1144 1152 1144
1144 1333 1143
1144 1378 1143
1144 1483 1143
答案 0 :(得分:0)
尝试此查询以获取OutPut的前四个值。
执行此查询您将收到存储过程的结果:
SELECT TOP 4 FromProfielId,UserProfielId,ToProfielID FROM [Your TableName];
我希望你能得到解决方案。
答案 1 :(得分:0)
我认为你应该删除不同的并通过UserProfileId添加组,FromProfileId
答案 2 :(得分:0)
尝试添加此
ORDER BY amount [ColumnName] LIMIT 4
答案 3 :(得分:0)
对从存储过程中获得的结果集执行以下查询。
SELECT TOP 1 * FROM [TableName] ORDER BY FromProfielId;
答案 4 :(得分:0)
try using ranking_functions
tutorial
with cte as (
SELECT DISTINCT
a.UserProfileId,
a.FromProfileId,
mm.FromProfileId as ToProfileID
FROM ( SELECT
mup.UserProfileId,dense_rank() over (order by mmb.FromProfileid) as rn
FROM dbo.Mindcracker_MailBox mmb
LEFT JOIN Mindcracker_UserProfile mup
ON mmb.ToProfileId=mup.UserProfileId
WHERE mup.UserProfileId=1144 ) a
LEFT JOIN dbo.Mindcracker_MailBox mm
ON a.FromProfileId=mm.ToProfileId
order by profile_ID
)
select * from cte where rn between 1 AND 4
答案 5 :(得分:0)
虽然这个问题已经很久以前了,但可能有人会发现它很有用。
要获取每个数据集的第一行,您需要使用窗口函数来窗口化结果集。
我只是制作你的结果集并根据它查询输出。它可以扩展为原始查询。
创建表格
CREATE TABLE #tbl(UserProfielId INT, FromProfileID INT, ToProfielID INT)
示例数据
INSERT #tbl
SELECT 1144 , 1152 , 1144 UNION ALL
SELECT 1144 , 1152 , 1378 UNION ALL
SELECT 1144 , 1152 , 1483 UNION ALL
SELECT 1144 , 1333 , 1143 UNION ALL
SELECT 1144 , 1333 , 1148 UNION ALL
SELECT 1144 , 1333 , 1290 UNION ALL
SELECT 1144 , 1333 , 1297 UNION ALL
SELECT 1144 , 1333 , 1333 UNION ALL
SELECT 1144 , 1333 , 1378 UNION ALL
SELECT 1144 , 1378 , 1143 UNION ALL
SELECT 1144 , 1378 , 1185 UNION ALL
SELECT 1144 , 1378 , 1333 UNION ALL
SELECT 1144 , 1378 , 1378 UNION ALL
SELECT 1144 , 1483 , 1143 UNION ALL
SELECT 1144 , 1483 , 1144 UNION ALL
SELECT 1144 , 1483 , 1297 UNION ALL
SELECT 1144 , 1483 , 1483 UNION ALL
SELECT 1144 , 11526 , 1148 UNION ALL
SELECT 1144 , 11526 , 1290 UNION ALL
SELECT 1144 , 11526 , 1333 UNION ALL
SELECT 1144 , 11526 , 1378 UNION ALL
SELECT 1144 , 11526 , 11526
<强>查询强>
使用ROW_NUMBER
功能在CTE
中显示结果集,然后根据您的主查询进行查询。
;WITH C AS(
SELECT ROW_NUMBER() OVER (PARTITION BY FromProfileID ORDER BY FromProfileID) AS Rn
,UserProfielId
,FromProfileID
,ToProfielID
FROM #tbl
)
SELECT UserProfielId
,FromProfileID
,ToProfielID
FROM C
WHERE Rn = 1
<强>输出强>
UserProfielId FromProfileID ToProfielID
1144 1152 1144
1144 1333 1143
1144 1378 1143
1144 1483 1143
1144 11526 1148