2017-03-03 101 views
0

我有一张表,其中包含tryouts,customerID,status这一个试用版和其他一些带有各种数据的列。T-SQL根据另一列中的最高值选择不同的列表

当然,单个customerID可以有多个tryouts(在真正的表中第一次尝试是数字1,第二个数字2等)。

Ex。

  • 客户ID = 1,试用= 1
  • 客户ID = 1,试用= 2
  • 客户ID = 1,试用= 3
  • 客户ID = 2,试用= 1
  • 客户ID = 3,试用= 1
  • 客户ID = 3,试模= 2

我想拥有所有截然不同的customerIDs,但每个行只有一行,它包含一个表中每个客户的最高tryout数字以及来自所有其他列的数据。例如, tryoutscustomerIDstatusdata1data2

我怎样才能做到这一点?

回答

1

如果你只希望客户ID和试用值,那么你可以尝试以下方法:

SELECT customerID, MAX(tryout) AS max_tryout 
FROM yourTable 
GROUP BY customerID 

如果你想整个记录,那么其中一个方案是使用ROW_NUMBER()

SELECT t.customerID, t.tryout, t.status, t.data1, t.data2 
FROM 
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY customerID ORDER BY tryout DESC) rn 
) t 
WHERE t.rn = 1 
+0

谢谢。如果我还想从所有列中获取数据,但是我的情况如何,但是我的退出条件和客户ID仍然存在?防爆。试用,客户ID,状态,data1,data2 – NihilisticWonder

+0

@NihilisticWonder我的第二个查询解决了这个问题。重新加载您的页面。 –

+0

我有点早...这只返回我在where子句中定义的值。是定义类似where = max(列名)的方法吗? – NihilisticWonder

0

尝试

SELECT 
    CustomerID, 
    MAX(tryout) AS [Max tryout] 
FROM 
    TheTable 
GROUP BY 
    CustomerID 

这应该给你你想要什么

相关问题