Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按日期和客户选择最大收入_Sql_Sql Server_Tsql - Fatal编程技术网

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;