Sql 按日期和客户选择最大收入
以下是我的表格中的示例数据:Sql 按日期和客户选择最大收入,sql,sql-server,tsql,Sql,Sql Server,Tsql,以下是我的表格中的示例数据: Rev Date Client 1890 2015-11-20 xyz 1536.28 2017-10-27 AAA 934.84 2017-10-27 AAA 919.592 2017-03-22 AAA 760.985 2014-11-25 xyz 我需要为每个客户选择收入最高的一天 我有以下查询,但它选择了客户每天的最大收入,而不仅仅是每个客户的最高收入 SELECT
Rev Date Client
1890 2015-11-20 xyz
1536.28 2017-10-27 AAA
934.84 2017-10-27 AAA
919.592 2017-03-22 AAA
760.985 2014-11-25 xyz
我需要为每个客户选择收入最高的一天
我有以下查询,但它选择了客户每天的最大收入,而不仅仅是每个客户的最高收入
SELECT TOP 1 max(rev)/1000 AS Rev, date, client FROM table1 GROUP BY date, client
常见问题。我想Rev已经是每天的总和了,我们只是选择了最高的一行。如果有联系,您可以使用
densite\u rank()
代替
select * from (
select *, row_number() over (partition by Client order by Rev desc) as rn
from table1
) t
where rn = 1;
一种选择是将WITH TIES子句与行编号()配合使用 示例
Select top 1 with ties *
From YourTable
Order By Row_Number() over (Partition By Client Order By Rev Desc)
设置:
查询:
SELECT Client
, t.[Date]
FROM
(
SELECT Client
, [Date]
, SUM(Rev) AS [TotalRev]
, ROW_NUMBER() OVER (PARTITION BY Client ORDER BY SUM(Rev) DESC) AS RN
FROM @data
GROUP BY Client, [Date]
) AS t
WHERE t.RN = 1
结果:
Client Date
====================
AAA 2017-10-27
xyz 2015-11-20
我会用这个
SELECT DISTINCT ca.*
FROM table1 t
CROSS APPLY (SELECT TOP 1 *
FROM table1
WHERE Client = t.Client
ORDER BY Rev DESC) ca
如果您已经有一个具有唯一ID的客户机
表,那么它会更干净
SELECT ca.Rev, ca.Date, c.Client
FROM Client c
CROSS APPLY (SELECT TOP 1 Rev, Date
FROM table1
WHERE Client = c.Client
ORDER BY Rev DESC) ca
据我所知,michaelg的问题是每天的交易收入最高,因此:
select * from (
select *, row_number() over (partition by [date] order by Rev desc) as rn
from ##table1
) t
where rn = 1;
若您想要您的客户机的总金额,那个么您已经将所有rev分组到子查询中
请在我的T-SQL代码中尝试您的脚本如果您不希望它按客户端分组,请将其从分组中删除。如果您需要客户信息,您必须使用内部查询来获取最大值。我假设TD是Date。如果您
按TD、client分组,则这些就是您将获得的组。
select * from (
select *, row_number() over (partition by [date] order by Rev desc) as rn
from ##table1
) t
where rn = 1;