如何查找SQL Server 2014的最低值和相应日期

如何查找SQL Server 2014的最低值和相应日期,sql,sql-server,sql-server-2008,select,Sql,Sql Server,Sql Server 2008,Select,我有样本数据。我想从“值”列中查找最低值,并从“上载日期”列中查找最低值的日期。我尝试了以下查询,但它无法正常工作并显示所有值 SELECT username, MIN(Value1) AS MinValue1, CASE WHEN value1 = MIN(value1) THEN uploaded_date END AS MinDate FROM test GROUP BY username 您可以使用window

我有样本数据。我想从“值”列中查找最低值,并从“上载日期”列中查找最低值的日期。我尝试了以下查询,但它无法正常工作并显示所有值

SELECT
    username,
    MIN(Value1) AS MinValue1,
    CASE 
        WHEN value1 = MIN(value1) THEN uploaded_date
    END
    AS MinDate
FROM
    test

GROUP BY
    username
您可以使用window函数查找每个用户名的最小值:

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

我希望这会对你有所帮助

  ;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

您的查询不起作用,因为您使用的是select列表中的列,因此Group by子句将所有不同的值分组到每一行中

谢谢,它工作得很好。我会在5分钟内接受你的回答。有什么建议说明我的方法不起作用吗?或者如何聚合。您的原始查询混合了聚合术语和非聚合术语,这是不允许的。另外两个答案演示了使用子查询将聚合项与行项分开的方法,而我的答案使用窗口函数。由于存在一个小错误,请更新查询。如果用户为value1输入相同的值,则会显示所有值。你能不能把它更新成只有一行(第一行)。
select Value1, update_date from test order by Value1 limit 1
select Value1, update_date from test order by Value1 limit 1