使用Aggregate函数在同一个表上进行两次内部连接

时间:2013-07-30 15:58:10

标签: sql-server tsql

是新手sql用户:

我有一个简单的表,每天晚上存储一些记录。表:

表:T1

+----+-----+----+-----------+------------+
| Id |  A  | AB |   Value   |    Date    |
+----+-----+----+-----------+------------+
|  1 | abc | I  | -48936.08 | 2013-06-24 |
|  2 | def | A  | 431266.19 | 2013-06-24 |
|  3 | xyz | I  | -13523.90 | 2013-06-24 |
|  4 | abc | A  | 13523.90  | 2013-06-23 |
|  5 | xyz | I  | -13523.90 | 2013-06-23 |
|  6 | def | A  | 13523.90  | 2013-06-22 |
|  7 | def | I  | -13523.90 | 2013-06-22 |
+----+-----+----+-----------+------------+

我想得到A列上的所有值A,AB,A列上最新日期的值,在AB = I上过滤

基本上结果应该是这样的:

+----+-----+----+-----------+------------+
| Id |  A  | AB |   Value   |    Date    |
+----+-----+----+-----------+------------+
|  1 | abc | I  | -48936.08 | 2013-06-24 |
|  3 | xyz | I  | -13523.90 | 2013-06-24 |
|  7 | def | I  | -13523.90 | 2013-06-22 |
+----+-----+----+-----------+------------+

我曾试图在同一张桌子上使用两次内连接,但未能提供正确的结果。

任何帮助将不胜感激。

谢谢:)

2 个答案:

答案 0 :(得分:3)

这适用于sqlserver 2005 +

;WITH a as
(
SELECT id, A,AB, Value, Date
, row_number() over (partition by A order by Date desc) rn
FROM t1
WHERE AB = 'I'
)
SELECT id, A,AB, Value, Date
FROM a WHERE rn = 1

答案 1 :(得分:3)

; WITH x AS (
  SELECT id
       , a
       , ab
       , "value"
       , "date"
       , Row_Number() OVER (PARTITION BY a ORDER BY "date" DESC) As row_num
  FROM   your_table
  WHERE  ab = 'I'
)
SELECT *
FROM   x
WHERE  row_num = 1