Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 Server 2005最大值、总和和分组依据_Sql_Sql Server 2005_Group By_Max - Fatal编程技术网

SQL Server 2005最大值、总和和分组依据

SQL Server 2005最大值、总和和分组依据,sql,sql-server-2005,group-by,max,Sql,Sql Server 2005,Group By,Max,我使用的是SQLServer2005,我的SQL查询有问题。基本上,我希望根据所有客户交易的最新日期,获得客户所有交易的总金额,按公司分组 样本数据: Customer_Id Date Amount COMPANY ------------------------------------------------- 1 3/3/2014 9021 COMPANY X 2 3/3/2014

我使用的是SQLServer2005,我的SQL查询有问题。基本上,我希望根据所有客户交易的最新日期,获得客户所有交易的总金额,按公司分组

样本数据:

Customer_Id    Date            Amount   COMPANY
-------------------------------------------------
1             3/3/2014          9021    COMPANY X 
2             3/3/2014          12000   COMPANY Y
2             3/15/2014         10000   COMPANY Y 
2             3/30/2014         8000    COMPANY Y 
4             3/13/2014         10000   COMPANY Z
5             3/14/2014         1400    COMPANY X 
1             3/16/2014         2500    COMPANY X 
7             3/14/2014         110     COMPANY Y 
3             3/17/2014         1500    COMPANY Z 
2             3/19/2014         2044    COMPANY Y
3             3/09/2014         9400    COMPANY Z 
3             3/11/2014         8950    COMPANY Z 
2             3/31/2014         3455    COMPANY Y 
3             3/15/2014         950     COMPANY Z 
6             3/15/2014         5543    COMPANY X
我想做到的是:

COMPANY       TOTAL
COMPANY X     9443    --> sum from customer_id 1 (2500, as of 3/16/2014) and customer_id 6 (5542, 3/15/2014) and customer_id 5 (1400 as of 3/14/2014)
COMPANY Y     3455    --> sum from customer_id 2 (3455, as of 3/31/2014)
COMPANY Z     10950   --> sum from customer_id 4 (1000, as of 3/13/2014) and customer_id 3 (950, as of 3/15/2014)
下面是我尝试过的一些SQL查询,它们对我的目标不起作用:

SELECT TOP (1) WITH TIES 
    Date, Company, SUM(Amount) AS total
FROM         
    tbl_Table
GROUP BY 
    Date, Company
ORDER BY 
    Date DESC

SELECT     
    t1.Date, t1.Company, SUM(t1.Amount) AS total
FROM         
    tbl_Table AS t1 
INNER JOIN
    (SELECT 
        MAX(Date) AS date, Company
     FROM  
        tbl_Table
     GROUP BY 
        Company) AS t2 ON t1.Date = t2.Date AND t1.Company = t2.Company
GROUP BY 
    t1.Date, t1.Company


WITH latest AS 
(SELECT 
     Company, MAX(Date) AS maxdate
 FROM         
     tbl_Table 
 GROUP BY 
     Company
)
SELECT     
    a.Date, a.Company, SUM(a.Amount) AS total
FROM      
    tbl_Table AS a 
INNER JOIN
    latest AS b ON a.Company = b.Company AND a.Date = b.maxdate
GROUP BY 
    a.Date, a.Company
试试这个

    WITH cte AS (
         SELECT Amount,Company,
                ROW_NUMBER() OVER (PARTITION BY Customer_Id ORDER BY CAST([Date] AS DATETIME) desc )   
                AS dateRowRank
    )

   SELECT Company,SUM(Amount)
   FROM cte
   WHERE dateRowRank=1
   GROUP BY Company

根据您提供的数据,您的结果仍然不正确

查询:

SELECT t1.Company,
       SUM(t1.Amount) Total
FROM Table1 t1
   LEFT JOIN Table1 t2
    ON t1.COMPANY = t2.COMPANY
      AND t1.Customer_Id = t2.Customer_Id
      AND t1.Date < t2.Date
   WHERE t2.Customer_Id is null
GROUP BY t1.Company

哈桑爵士。我不知道您的sql代码出了什么问题,但当我执行查询时,我的sql server 2005崩溃了。我注意到这个问题也出现在我尝试过的包含“row_number()”和“over partition”的其他sql查询中。谢谢,@Justin。你的解决方案解决了所有问题。虽然我现在还不懂你的sql代码(我是sql查询新手),但我很快就会明白。再次感谢。关于“根据你提供的数据,你的结果仍然不正确”,我忽略了这一点。很抱歉
|   COMPANY | TOTAL |
|-----------|-------|
| COMPANY X |  9443 |
| COMPANY Y |  3565 |
| COMPANY Z | 11500 |