T-SQL根据另一列中的最高值选择不同的列表
问题描述:
我有一张表,其中包含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
数字以及来自所有其他列的数据。例如, tryouts
,customerID
,status
,data1
,data2
我怎样才能做到这一点?
答
如果你只希望客户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
答
尝试
SELECT
CustomerID,
MAX(tryout) AS [Max tryout]
FROM
TheTable
GROUP BY
CustomerID
这应该给你你想要什么
谢谢。如果我还想从所有列中获取数据,但是我的情况如何,但是我的退出条件和客户ID仍然存在?防爆。试用,客户ID,状态,data1,data2 – NihilisticWonder
@NihilisticWonder我的第二个查询解决了这个问题。重新加载您的页面。 –
我有点早...这只返回我在where子句中定义的值。是定义类似where = max(列名)的方法吗? – NihilisticWonder