sql-server - 使用聚合函数在同一张表上进行两次内部连接

标签 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、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 |
+----+-----+----+-----------+------------+

我曾尝试在同一张表上两次使用内部联接,但未能得出正确的结果。

如有任何帮助,我们将不胜感激。

谢谢:)

最佳答案

这将适用于 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

关于sql-server - 使用聚合函数在同一张表上进行两次内部连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17951844/

相关文章:

c# - Asp.net Web api,带有用于在数据库中存储事件日志的队列

sql-server - 是否可以获取仅读取数据的存储过程列表?

c# - 时间和 DISTINCT 列之间的 sql 查询

sql-server - 将两个sql表合并在一起的最佳方法

sql-server-2008 - SQL回滚事务

sql - 如何使用 SQL Server 舍入到下一个 0.05 的倍数?

sql - 使用 SQL Server 插入具有自动增量的嵌套实体

sql - View 或函数 '' 不可更新,因为修改影响多个基表

sql-server - SQL使用group by合并重复行

sql-server - 如何重命名 SQL Server 中的 XML 节点名称