获取相同ColumnID的最后记录

时间:2014-02-09 17:44:51

标签: sql tsql filter

我目前坚持以下任务:

我有一张看起来与此类似的表

| TableID | EntityID | InvoiceAmount |    Date    |
|     1   |   46     | 300 000       | 14-01-2014 |
|     2   |  232     | 2456,63       | 17-01-2014 |
|     3   |   46     | 400 000       | 22-01-2014 |
|     4   |  232     | 333 000       | 31-01-2014 |
|     5   |   12     | 124           | 11-01-2014 |
|     6   |   46     | 300 000       | 31-01-2014 |

我需要的是EntityID根据日期列的最后一个发票金额, 因此,在EntityID 46的案例中,这将是31-01-2014,实体的价值将是:300 000。

问题:有没有办法在SQL中执行此操作或我有哪些其他选项?

非常感谢!

1 个答案:

答案 0 :(得分:1)

最简单的sql-server> = 2005正在使用像ROW_NUMBER这样的排名函数:

WITH CTE AS
(
    SELECT TableID,EntityID,InvoiceAmount,Date,
        RN = ROW_NUMBER() OVER (PARTITION BY EntityID ORDER BY Date DESC)
    FROM dbo.TableName
)
SELECT InvoiceAmount FROM CTE 
WHERE RN = 1 
-- AND EntityID = 46

Demo