2015-09-15 55 views

回答

1

您可以使用RANK窗函数查找每个用户名的最小值:

SELECT username, value1, uploaded_date 
FROM (SELECT username, value1, uploaded_date, 
       RANK() OVER (PARTITION BY username ORDER BY value1 ASC) AS rk 
     FROM test) t 
WHERE rk = 1 

SQLFIddle

+0

感谢您的查询没有工作,这工作就像一个魅力。我会在5分钟内接受你的回答。任何建议,为什么我的方法不工作?或如何可以汇总。 – Nimko

+0

您的原始查询是混合聚合和非聚合条款,这是不允许的。另外两个答案演示了如何使用子查询将行条款中的汇总条款分开,而我的代码则使用了窗口函数。 – Mureinik

0

我希望这将帮助你

;with CTE as(
    SELECT username, 
     MIN(Value1) AS MinValue1 
    FROM 
     test 
    GROUP BY 
    username 
) 

    select c.username,MinValue1,dt.uploaded_date from CTE c 
    cross apply(select top 1 uploaded_date from test where value1=c.MinValue1 and username=c.username order by uploaded_date desc) dt 
1
SELECT test. username,value1,MIN(uploaded_date )FROM 
(Select MIN(value1) MinValue1,username from test group by username) A 
INNER JOIN 
test 
ON A.MinValue1 = test.Value1 
AND A.username = test.username 
GROUP BY 
test. username,value1 

,因为你正在使用的列在选择列表中,以便在GROUP BY子句意志集团所有不同值到每一行

+0

你可以请更新查询,因为有一个小错误。在用户为value1输入相同值时,会显示所有值。你可以请更新它只做一行(第一个)。 – Nimko

+0

@Nimko我已经做了修改 – mindbdev

-1
select Value1, update_date from test order by Value1 limit 1 
相关问题