在表格中选择最近修改的日期

时间:2014-02-21 10:48:39

标签: sql sql-server sql-server-2008

这是我的表:

ID   AppName  DepCode   DepName     Group     ModifiedDate   YearlyAmount
1    Nestle    NS      Foods        Products     01/12/14          451 
1    Nestle    NS      Foods        Products     01/17/14          495                
2    Oracle    OR      Software       Info       01/24/14          279   
2    Oracle    OR      Soft & IT      Info       01/26/14          310
2    Oracle    ORL     Software       Info       01/25/14          219
2    Oracle    ORL     Soft           IT         01/28/14          600

MonthlyAmount Funded   AppCategory  Research
37.5623       Yes       NE            NA
41.2365       No        N             NA
23.2568       Yes       OR        InProgress
25.8333       Yes       ORL           NA  
18.2189       Yes       SOF        Approved
50.0000       No        IT         Rejected

预期输出:

ID  AppName  DepCode   DepName        Group     ModifiedDate   YearlyAmount 
 1    Nestle    NS      Foods         Products    01/17/14         946  
 2    Oracle    OR      Soft & IT      Info       01/26/14         589
 2    Oracle    ORL     Soft           IT         01/28/14         819

MonthlyAmount  Funded  AppCategory      Research 
78.7988          No        N             NA
49.0901         Yes       ORL            NA 
68.2189          No       IT          Rejected

我想选择DepCode的最近修改日期,并将年度和月度金额相加。我试过这个查询而无法获得输出。这也是一张桌子。

select B1.[ID], B1.[AppName], B2.[DepCode], B1.[DepName], B1.[Group], 
B2.ModifiedDate, B2.YearlyAmount, B2.MonthlyAmount, 
B1.[Funded], B1.[AppCategory], B1.[Research]
FROM Business B1
INNER JOIN
(select [ID], B1.[DepCode], MAX(ModifiedDate) as ModifiedDate, SUM(YearlyAmount) as YearlyAmount,
    SUM(MonthlyAmount) as MonthlyAmount 
 from Business
Group by ID, DepCode) B2
ON B1.ID = B2.ID AND B1.ModifiedDate = B2.ModifiedDate

任何人都请指正,或建议如何解决这个问题,因为我是SQL的首发。

2 个答案:

答案 0 :(得分:0)

这有点复杂,因为有几列你不能使用聚合函数 - 它们的值来自具有最大日期的记录。您可以使用子查询首先获取总计和最大日期,然后使用该信息获取其他列

select B1.[ID], B1.[AppName], B2.[DepCode], B1.[DepName], B1.[Group], 
    B2.ModifiedDate, B2.YearlyAmount, B2.MonthlyAmount, 
    B1.[Funded], B1.[AppCategory], B1.[Research]
FROM Business B1
INNER JOIN
    (select [ID], DepCode, MAX(ModifiedDate) as ModifiedDate, SUM(YearlyAmount) as YearlyAmount,
        SUM(MonthlyAmount) as MonthlyAmount 
    from Business
    Group by ID, DepCode) B2
ON B1.ID = B2.ID AND B1.ModifiedDate = B2.ModifiedDate 

SQL Fiddle demo

答案 1 :(得分:0)

问题是您的几列没有相同的值,因此groupby无效。

由于您需要recent modified date for DepCodesum YearlyMonthly Amount

试试这个

SELECT [ID], [AppName], [DepCode], 
       MAX(ModifiedDate) AS ModifiedDate,
       SUM(YearlyAmount) AS YearlyAmount,
       SUM(MonthlyAmount) AS MonthlyAmount
FROM [dbo].[Bus]
GROUP BY DepCode, ID, AppName
ORDER BY ID

fiddle