0

我有一张表,其中 AsOfDate 有多个 BatchDates:

>Cmmt || AsOfDate            || BatchDate
>
>6789 || 2016-02-11 00:00:00 || 2016-02-11 09:32:05
>
>6789 || 2016-02-11 00:00:00 || 2016-02-11 11:48:22
>
>2598 || 2016-02-12 00:00:00 || 2016-02-12 10:32:05
>
>6789 || 2016-02-12 00:00:00 || 2016-02-12 10:32:05
>
>6789 || 2016-02-12 00:00:00 || 2016-02-12 12:48:22

我想返回最大批处理日期的所有记录-

结果应该是:

>Cmmt || AsOfDate            || BatchDate
>
>2598 || 2016-02-12 00:00:00 || 2016-02-12 12:48:22
>
>6789 || 2016-02-12 00:00:00 || 2016-02-12 12:48:22

我已经尝试过了,但我一直返回所有记录和日期:

>SELECT w.AsOfDate
>      ,w.BatchDate
>      ,w.Balance
>
> FROM bi.RWAFinanceReport w
>
>>INNER JOIN (
        >>>SELECT AsOfDate, MAX(BatchDate) AS MaxBatchDate
>
        >>>FROM bi.RWAFinanceReport GROUP BY AsOfDate) x 
>
        >>>on w.AsofDate=x.AsOfDate AND w.BatchDate=x.MaxBatchDate
>
>WHERE w.Balance<>0

有人对如何解决这个问题有一些提示吗?

/************/

今天解决了这个野兽。

这里有两个子选择查询,一个是查找 maxbatchdate - 我想要的下一个是查找最大日期。提出这些问题很难...

>  INNER JOIN (
>             SELECT ProductID, AsOfDate, MAX(BatchDate) AS MaxBatchDate
>             FROM bi.RWAFinanceReport GROUP BY ProductID, AsOfDate) x 
>             on w.ProductID=x.ProductID AND w.AsOfDate=x.AsOfDate _
>               AND w.BatchDate=x.MaxBatchDate
>
> INNER JOIN (
>                    SELECT MAX(AsOfDate) AS MaxAsOfDate
>                    FROM bi.RWAFinanceReport) y 
>                    on w.AsOfDate = y.MaxAsOfDate
4

1 回答 1

2

看起来您不应该按 分组AsOfDate,而应该按 分组Cmmt。试试这个:

SELECT w.AsOfDate
      ,w.BatchDate
      ,w.Balance
FROM bi.RWAFinanceReport w
INNER JOIN (
        SELECT Cmmt, MAX(BatchDate) AS MaxBatchDate
        FROM bi.RWAFinanceReport 
        GROUP BY Cmmt) x 
    on w.Cmmt=x.Cmmt AND w.BatchDate=x.MaxBatchDate
WHERE w.Balance<>0
于 2016-02-16T21:59:58.797 回答