SQL Server 2005最大值、总和和分组依据
我使用的是SQLServer2005,我的SQL查询有问题。基本上,我希望根据所有客户交易的最新日期,获得客户所有交易的总金额,按公司分组 样本数据: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
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 |